天天看點

SQLEXPRESS的連接配接字元串

搞了一晚上的SQLEXPRESS 連接配接字元串....就因為一個User Instance=True 沒加... 

樣例

Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\KWJLDatabase.mdf;Integrated Security=True;User Instance=True;

下面是來自網上的文章.

<add name="applicationServices"

connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFileName=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>

Integrated   Security預設值是False,此時需要提供Uid和Pwd,即将以Sql   Server   使用者身份登陸資料庫;如果設定為True,Yes   或   SSPI,這不能出現Uid和Pwd,将以Windows使用者省份登陸資料庫。強烈推薦用後一種形式,安全性更高。

User Instance

A value that indicates whether to redirect the connection from the default SQL Server Express instance to a runtime-initiated instance running under the account of the caller.

曾經,要運作 SQL Server 資料庫,就必須在執行個體下建立資料庫,不管是直接建立、還是附加、還是還原,總之都得在執行個體下建立,但這造成一個問題,我們的權限不夠高,無法将資料庫附加或還原到 SQL Server,我們隻是有 .mdf、.ldf 檔案。

從 SQL Server 2005 開始,有了新選擇

在連接配接字元串中使用 AttachDbFilename,可直接連接配接到一個資料庫檔案。比如是這樣的:

Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Data.mdf;Integrated Security=True;User Instance=True

這裡 User Instance 就是使用者執行個體,為 True,表示使用使用者執行個體。

那什麼是使用者執行個體呢?

先看看執行個體

SQL Server 執行個體是一個在伺服器上運作的 SQL Server 可執行程式。每個執行個體都有一個名稱,記憶體中的一個 sqlservr.exe 程序、緩沖區記憶體、它自己的系統資料庫副本,以及它自己的一組使用者資料庫。例如,預設情況下,SQL Server Express 作為一個名為“SQLEXPRESS”的執行個體安裝。通過在連接配接字元串中指定帶有伺服器名稱的執行個體名,可以連接配接到已命名的執行個體。這就是在連接配接到本地 SQL Server Express 資料庫時通常将“.\SQLEXPRESS”指定為伺服器名的原因。點(.)意味着本地伺服器,\SQLEXPRESS 指定了 SQLEXPRESS 命名執行個體。

再看使用者執行個體

使用者執行個體是對執行個體的擴充。使用者執行個體與普通執行個體類似,但它是在需要的時候建立,而普通執行個體是在安裝期間建立的。

使用者執行個體必須由父執行個體建立,是以使用使用者執行個體時,我們也不能省略 Data Source。

誰打開了資料庫連接配接,誰就是這個使用者執行個體的運作帳戶,比如 IUSR_Cftea 運作着網站,它打開了帶使用者執行個體的資料庫連接配接,那麼這個使用者執行個體就是以 IUSR_Cftea 運作的。

使用者執行個體限制

僅允許本地連接配接。

不能複制使用者執行個體。

分布式查詢對遠端資料庫不起作用。

使用者執行個體僅在 SQL Server 的 Express Edition 内運作。

更詳細

以下來自 MSDN:

當打開一個 User Instance 選項為 True 的連接配接時會發生什麼?下列步驟描述使用者第一次打開一個使用者執行個體連接配接時發生的情況。

SQLClient 邏輯打開一個到 SQL Server Express 父執行個體(預設情況下是 .\SQLEXPRESS)的連接配接。

SQL Server Express 檢測到已經設定了 User Instance 選項且該使用者沒有使用者執行個體。

将 master 和 msdb 系統資料庫檔案複制到使用者的目錄下。在 Sally 的示例中,該目錄為: C:\Documents and Settings\Sally\Local Settings\Application 

Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

這些檔案是從一個在安裝父執行個體時建立的模闆目錄複制的。使用者執行個體啟動後,tempdb、日志和跟蹤檔案被寫入這個相同的使用者目錄。

父執行個體模拟正在打開該連接配接的 Windows 使用者,并且啟動一個以該使用者身份運作的 sqlservr.exe 副本。系統資料庫的位置作為參數傳遞。生成執行個體的名稱。例如: 69651E0A-5550-46。

為新執行個體建立一個命名管道資料庫連接配接。該名稱基于執行個體名。例如:

\\.\pipe\69651E0A-5550-46\tsql\query.

将 AttachDBFilename 參數中指定的資料庫檔案附加到新執行個體,并用該檔案的完整路徑命名該檔案:

[C:\MYDBPROJECTS\TESTVB1\TESTVB1\DATABASE1.MDF]

命名管道的名稱傳回到正在打開連接配接的 SqlClient。

SqlClient 接收到該連接配接的名稱後,關閉到父執行個體的連接配接。它使用傳回的命名管道名打開一個到該使用者執行個體的新連接配接。

一旦為特定使用者建立了使用者執行個體,就會保留系統資料庫和命名管道。是以,在第一次連接配接後,後續連接配接就隻需執行後兩步操作了。

關閉到該執行個體的最後一個連接配接後,啟動的 sqlservr.exe 程序還會繼續運作一段時間。是以,如果打開其他連接配接,則不需要重新啟動該程序。繼續運作的時間長度是由 sp_configure 選項“使用者執行個體逾時”設定的。預設情況下,時間長度設為 60 分鐘,但是您可以用 sp_configure 指令更改它。

此版本的 SQL Server 不支援使用者執行個體登入标志

運作時可能會遇到錯誤“此版本的 SQL Server 不支援使用者執行個體登入标志”,前面說了使用者執行個體僅在 SQL Server 的 Express Edition 内運作,如果不是 Express 版本,就不能将 User Instance 設定為 True,或将其去掉。