在使用connection string時遇到一些問題
字符串如下"Data Source= ******;Initial Catalog=******;Persist Security Info=True;Integrated Security=true;User ID=sa;Password=******;Connect Timeout=10"
問題一:連接提示windows用戶權限之類錯誤
這個問題應該是本機的windows用戶無法連接遠端數據庫服務器,相關屬性為"Integrated Security=true"
Integrated Security=true連接屬性說明:參見http://www.cnblogs.com/zxjyuan/archive/2009/03/11/1408991.html
Integrated Security 身份驗證方式
當為false時,將在連接中指定用戶ID和密碼。
當為true時,將使用當前的Windows帳戶憑據進行身份驗證。
可識別的值為true、false、yes、no以及與true等效的sspi。
Microsoft安全支持提供器接口(SSPI)是定義得較全面的公用API,用來獲得驗證、信息完整性、信息隱私等集成安全服務,以及用於所有分布式應用程序協議的安全方面的服務。應用程序協議設計者能夠利用該接口獲得不同的安全性服務而不必修改協議本身。
上面這句話的意思就是這個連接采用了這個接口,如果沒有定義就會出錯!
指你使用windows自帶的安全驗證機制,這時你不用加uid和password也可以打開數據庫
如果你沒有那一句的話,就必須在聯接字符串里寫上uid=sa;password=00;
否則你不能打開數據庫
問題二:設置的connect timeout=10 無效,連接時會等很久(40s左右)
出現這個問題可能的原因是本機與數據庫主機不通,設置的timeout屬性是在連通時有效
其他說明
Persist Security Info=True 參見http://blog.csdn.net/yzsind/article/details/1507717
Persist Security Info屬性的意思是表示是否保存安全信息,其實可以簡單的理解為"ADO在數據庫連接成功后是否保存密碼信息",
True表示保存,False表示不保存
ADO缺省為True
(ADO.net缺省為False,未測試,根據參考資料上說的)
所以一般使用默認的false
Pooling = false 參見 http://www.cnblogs.com/eaglet/archive/2011/10/31/2230197.html
Pooling 屬性設置是否使用連接池,默認情況下是使用的,即Pooling = true。
使用連接池,只有當第一次建立連接時(connection.open())時會耗時較多(幾十毫秒),后面再次建立連接時幾乎不耗時間(前提是物理連接沒有斷開,物理連接一般會有個默認等待時間沒有使用則斷開,20分鍾或其他)。connection.close()只是關閉邏輯連接。
不使用連接池,則每次都是重新建立物理連接,需要做和服務器握手,解析連接字符串,授權,約束的檢查等等操作,耗時較長。
Min Pool Size = 1,Max Pool Size = 100 參見 http://www.cnblogs.com/eaglet/archive/2011/10/31/2230197.html
MinPoolSize 屬性指第一建立物理連接時默認建立的連接數,默認為0則指建立一個物理連接。
MaxPoolSize 屬性指最多會建立的物理連接數,默認是100(具體詳查),當有多線程同時建立100+數據庫連接時,則會出現等待阻塞。
通常建議的做法是MinPoolSize保持默認的0值,MaxPoolSize設置為可能發生的最大連接數,連接池中的物理連接數量會自適應具體數。
Sql Server 可以接受的最大連接數為32767.