1. 程式人生 > >SQL Server Express連線字串

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;

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,或將其去掉。