在使用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.