SQL Server Express連線字串
轉自:http://blog.csdn.net/phker/article/details/45648657
搞了一晚上的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;
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,或將其去掉。