SqlConnection.ConnectionString 屬性
ConnectionString 類似于 OLE DB 連接字符串,但并不相同。與 OLE DB 或 ADO 不同,如果“Persist Security Info ”值設(shè)置為 false(默認(rèn)值),則返回的連接字符串與用戶設(shè)置的 ConnectionString 相同但去除了安全信息。除非將“Persist Security Info ”設(shè)置為 true,否則,SQL Server .NET Framework 數(shù)據(jù)提供程序?qū)⒉粫?huì)保持,也不會(huì)返回連接字符串中的密碼。
可以使用 ConnectionString 屬性連接到數(shù)據(jù)庫(kù)。下面的示例闡釋了一個(gè)典型的連接字符串。
"Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer"
只有在連接關(guān)閉時(shí)才能設(shè)置 ConnectionString 屬性。許多連接字符串值都具有相應(yīng)的只讀屬性。當(dāng)設(shè)置連接字符串時(shí),將更新所有這些屬性(除非檢測(cè)到錯(cuò)誤)。檢測(cè)到錯(cuò)誤時(shí),不會(huì)更新任何屬性。SqlConnection 屬性只返回那些包含在 ConnectionString 中的設(shè)置。
若要連接到本地機(jī)器,請(qǐng)將服務(wù)器指定為“(local)”。(必須始終指定一個(gè)服務(wù)器。)
重置已關(guān)閉連接上的 ConnectionString 會(huì)重置包括密碼在內(nèi)的所有連接字符串值(和相關(guān)屬性)。例如,如果設(shè)置一個(gè)連接字符串,其中包含“Database= northwind”,然后再將該連接字符串重置為“Data Source=myserver;Integrated Security=SSPI”,則 Database 屬性將不再設(shè)置為 Northwind。
在設(shè)置后會(huì)立即分析連接字符串。如果在分析時(shí)發(fā)現(xiàn)語(yǔ)法中有錯(cuò)誤,則產(chǎn)生運(yùn)行庫(kù)異常,如 ArgumentException。只有當(dāng)試圖打開(kāi)連接時(shí),才會(huì)發(fā)現(xiàn)其他錯(cuò)誤。
連接字符串的基本格式包括一系列由分號(hào)分隔的關(guān)鍵字/值對(duì)。等號(hào) (=) 連接各個(gè)關(guān)鍵字及其值。若要包括含有分號(hào)、單引號(hào)字符或雙引號(hào)字符的值,則該值必須用雙引號(hào)括起來(lái)。如果該值同時(shí)包含分號(hào)和雙引號(hào)字符,則該值可以用單引號(hào)括起來(lái)。如果該值以雙引號(hào)字符開(kāi)始,則還可以使用單引號(hào)。相反地,如果該值以單引號(hào)開(kāi)始,則可以使用雙引號(hào)。如果該值同時(shí)包含單引號(hào)和雙引號(hào)字符,則用于將值括起來(lái)的引號(hào)字符每次出現(xiàn)時(shí),都必須成對(duì)出現(xiàn)。
若要在字符串值中包括前導(dǎo)或尾隨空格,則該值必須用單引號(hào)或雙引號(hào)括起來(lái)。即使將整數(shù)、布爾值或枚舉值用引號(hào)括起來(lái),其周圍的任何前導(dǎo)或尾隨空格也將被忽略。然而,保留字符串關(guān)鍵字或值內(nèi)的空格。使用 .NET Framework 1.1 版時(shí),在連接字符串中可以使用單引號(hào)或雙引號(hào)而不用使用分隔符(例如,Data Source= my'Server 或 Data Source= my"Server),但引號(hào)字符不可以為值的第一個(gè)或最后一個(gè)字符。
若要在關(guān)鍵字或值中包括等號(hào) (=),則它之前必須還有另一個(gè)等號(hào)。例如,在假設(shè)的連接字符串中,
"key==word=value"
關(guān)鍵字是“key=word”并且值是“value”。
如果“keyword= value”對(duì)中的一個(gè)特定關(guān)鍵字多次出現(xiàn)在連接字符串中,則將所列出的最后一個(gè)用于值集。
關(guān)鍵字不區(qū)分大小寫(xiě)。
下表列出了 ConnectionString 中的關(guān)鍵字值的有效名稱。
名稱 默認(rèn)值 說(shuō)明
Application Name 應(yīng)用程序的名稱,如果不提供應(yīng)用程序名稱,默認(rèn)是:“.Net SqlClient Data Provider”
AttachDBFilename
- 或 -
extended properties
- 或 -
Initial File Name 可連接數(shù)據(jù)庫(kù)的主文件的名稱,包括完整的路徑名。
必須使用關(guān)鍵字“database”來(lái)指定數(shù)據(jù)庫(kù)的名稱。
Connect Timeout
- 或 -
Connection Timeout
15 在終止嘗試連接并產(chǎn)生錯(cuò)誤之前,等待與服務(wù)器的連接的時(shí)間長(zhǎng)度(以秒為單位)。
Current Language SQL Server 語(yǔ)言
Data Source
- 或 -
Server
- 或 -
Address
- 或 -
Addr
- 或 -
Network Address
要連接的 SQL Server 實(shí)例的名稱或網(wǎng)絡(luò)地址。
Encrypt 'false' 當(dāng)該值為 true 時(shí),如果服務(wù)器端安裝了證書(shū),則 SQL Server 將對(duì)所有在客戶端和服務(wù)器之間傳送的數(shù)據(jù)使用 SSL 加密??勺R(shí)別的值為 true、false、yes 和 no。
Initial Catalog
- 或 -
Database
數(shù)據(jù)庫(kù)的名稱。
Integrated Security
- 或 -
Trusted_Connection
'false' 當(dāng)為 false 時(shí),將在連接中指定用戶 ID 和密碼。當(dāng)為 true 時(shí),將使用當(dāng)前的 Windows 帳戶憑據(jù)進(jìn)行身份驗(yàn)證。
可識(shí)別的值為 true、false、yes、no 以及與 true 等效的 sspi(強(qiáng)烈推薦)。
Network Library
- 或 -
Net
'dbmssocn' 用于建立與 SQL Server 實(shí)例的連接的網(wǎng)絡(luò)庫(kù)。支持的值包括 dbnmpntw(命名管道)、dbmsrpcn(多協(xié)議)、dbmsadsn (Apple Talk)、dbmsgnet (VIA)、dbmslpcn(共享內(nèi)存)及 dbmsspxn (IPX/SPX) 和 dbmssocn (TCP/IP)。
相應(yīng)的網(wǎng)絡(luò) DLL 必須安裝在要連接的系統(tǒng)上。如果不指定網(wǎng)絡(luò)而使用一個(gè)本地服務(wù)器(比如“.”或“(local)”),則使用共享內(nèi)存。
Packet Size 8192 用來(lái)與 SQL Server 的實(shí)例進(jìn)行通訊的網(wǎng)絡(luò)數(shù)據(jù)包的大小,以字節(jié)為單位。
Password
- 或 -
Pwd
SQL Server 帳戶登錄的密碼(建議不要使用。為了維護(hù)最高級(jí)別的安全性,強(qiáng)烈建議改用 Integrated Security 或 Trusted_Connection 關(guān)鍵字)。
Persist Security Info 'false' 當(dāng)該值設(shè)置為 false 或 no(強(qiáng)烈推薦)時(shí),如果連接是打開(kāi)的或者一直處于打開(kāi)狀態(tài),那么安全敏感信息(如密碼)將不會(huì)作為連接的一部分返回。重置連接字符串將重置包括密碼在內(nèi)的所有連接字符串值??勺R(shí)別的值為 true、false、yes 和 no。
User ID SQL Server 登錄帳戶(建議不要使用。為了維護(hù)最高級(jí)別的安全性,強(qiáng)烈建議改用 Integrated Security 或 Trusted_Connection 關(guān)鍵字)。
Workstation ID 本地計(jì)算機(jī)名稱 連接到 SQL Server 的工作站的名稱。
下表列出了 ConnectionString 內(nèi)連接池值的有效名稱。有關(guān)連接池的更多信息,請(qǐng)參見(jiàn) SQL Server .NET Framework 數(shù)據(jù)提供程序連接池。
名稱 默認(rèn)值 說(shuō)明
Connection Lifetime 0 當(dāng)連接被返回到池時(shí),將其創(chuàng)建時(shí)間與當(dāng)前時(shí)間作比較,如果時(shí)間長(zhǎng)度(以秒為單位)超出了由 Connection Lifetime 指定的值,該連接就會(huì)被銷毀。這在聚集配置中很有用(用于強(qiáng)制執(zhí)行運(yùn)行中的服務(wù)器和剛置于聯(lián)機(jī)狀態(tài)的服務(wù)器之間的負(fù)載平衡)。
零 (0) 值將使池連接具有最大的連接超時(shí)。
Connection Reset 'true' 確定從池中提取數(shù)據(jù)庫(kù)連接時(shí)是否重置數(shù)據(jù)庫(kù)連接。對(duì)于 Microsoft SQL Server 7.0 版,設(shè)置為 false 可避免獲取連接時(shí)再有一次額外的服務(wù)器往返行程,但須注意此時(shí)并未重置連接狀態(tài)(如數(shù)據(jù)庫(kù)上下文)。
Enlist 'true' 當(dāng)該值為 true 時(shí),池程序在創(chuàng)建線程的當(dāng)前事務(wù)上下文中自動(dòng)登記連接。可識(shí)別的值為 true、false、yes 和 no。
Max Pool Size 100 池中允許的最大連接數(shù)。
Min Pool Size 0 池中允許的最小連接數(shù)。
Pooling 'true' 當(dāng)該值為 true 時(shí),系統(tǒng)將從相應(yīng)池中提取 SQLConnection 對(duì)象,或在必要時(shí)創(chuàng)建該對(duì)象并將其添加到相應(yīng)池中??勺R(shí)別的值為 true、false、yes 和 no。
當(dāng)設(shè)置需要布爾值的關(guān)鍵字或連接池值時(shí),您可以使用 'yes' 代替 'true','no' 代替 'false'。整數(shù)值表示為字符串。
注意 SQL Server .NET Framework 數(shù)據(jù)提供程序使用它自己的協(xié)議與 SQL Server 進(jìn)行通信。因此,當(dāng)連接到 SQL Server 時(shí),它不支持 ODBC 數(shù)據(jù)源名稱 (DSN) 的使用,因?yàn)樗惶砑?ODBC 層。 警告 在此版本中,在應(yīng)用程序中根據(jù)用戶輸入構(gòu)造連接字符串時(shí)(例如,從對(duì)話框中檢索用戶 ID 和密碼信息并將其追加到連接字符串時(shí))應(yīng)相當(dāng)謹(jǐn)慎。應(yīng)用程序應(yīng)確保用戶無(wú)法在這些值中嵌入額外的連接字符串參數(shù)(例如,輸入“validpassword;database=somedb”作為密碼,以試圖連接到其他數(shù)據(jù)庫(kù))。
示例
[Visual Basic, C#] 下面的示例創(chuàng)建一個(gè) SqlConnection并設(shè)置它的一些屬性。
[Visual Basic]
Public Sub CreateSqlConnection()
Dim myConnection As New SqlConnection()
myConnection.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer;Connect Timeout=30"
myConnection.Open()
End Sub 'CreateSqlConnection
[C#]
public void CreateSqlConnection()
{
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer;Connect Timeout=30";
myConnection.Open();
}