2010-11-29 206 views
97

我可以通過修改web.config中的連接字符串來增加超時嗎?SQL服務器的連接超時

+2

不要讀這個像我一樣想的超時將控制查詢執行 - 它沒有,只有超時連接到服務器 - 「連接超時「會是一個更好的名字。請參閱http://stackoverflow.com/a/7976867/409856 – downwitch 2014-05-30 19:07:49

回答

183

是的,你可以追加;Connection Timeout=30connection string並指定希望的值。

Connection Timeout屬性中設置的超時值是時間,以秒爲單位。如果未設置此屬性,則連接的超時值爲默認值(15秒)。

此外,將超時值設置爲0,您指定您的連接嘗試等待無限時間。如文檔中所描述的,這是後話,你不應該在連接字符串中設置:

值爲0表示沒有限制,並且應該以 的ConnectionString避免,因爲試圖無限期地等待連接。

+4

這是超時在分鐘還是秒? – user1 2013-07-08 21:14:51

+1

@ user1「終止嘗試並生成錯誤之前,等待連接到服務器的時間長度(以秒爲單位)。」 – Santux 2013-07-30 15:03:13

+5

參考:連接超時= 0是無限的。 – 2013-08-27 12:11:26

29

嗯...

正如達林說,你可以指定一個較高的連接超時值,但我懷疑這是真正的問題。

當你連接超時,它通常具有以下的一個問題:

  1. 網絡配置 - 你的web服務器的/ dev框和SQL服務器之間的連接速度很慢。增加超時時間可能會糾正這種情況,但調查潛在問題是明智之舉。

  2. 連接字符串。我遇到了一些問題,出於某種原因,不正確的用戶名/密碼會出於某種原因發出超時錯誤,而不是真正的錯誤,指示「訪問被拒絕」。這不應該發生,但這就是生活。

  3. 連接字符串2:如果您錯誤地或不完整地指定了服務器的名稱(例如,mysqlserver而不是mysqlserver.webdomain.com),則會發生超時。您能否使用服務器名稱來嚴格按照命令行中的連接字符串中的指定來ping服務器?

  4. 連接字符串3:如果服務器名稱在您的DNS(或主機文件)中,但指向錯誤或無法訪問的IP,您將得到超時而不是機器未發現的ish錯誤。

  5. 您打電話的查詢超時。它可能看起來像連接到服務器是問題,但根據您的應用程序的結構,您可以在超時發生之前將它一直髮送到執行查詢的階段。

  6. 連接泄漏。有多少個進程正在運行?多少個開放連接?我不確定原始的ADO.NET是否執行連接池,在必要時自動關閉連接ala Enterprise Library,或者所有配置的位置。這可能是一個紅鯡魚。但是,在使用WCF和Web服務時,我遇到了導致超時和其他不可預知行爲的未關閉連接的問題。

事情嘗試:

  1. 你得到一個超時連接到使用SQL Management Studio中的服務器時?如果是這樣,網絡配置可能是問題。如果連接Management Studio時看不到問題,則問題將出現在您的應用程序中,而不是服務器中。

  2. 運行SQL事件探查器,查看實際發生的事情。你應該能夠知道你是否真的連接,或者如果查詢是問題。

  3. 在Management Studio中運行您的查詢,並查看需要多長時間。

祝你好運!

10

如果要動態更改它,我更喜歡使用SqlConnectionStringBuilder

它允許您將ConnectionString(即字符串)轉換爲類Object,所有連接字符串屬性將成爲其成員。

在這種情況下,真正的優點是您不必擔心ConnectionTimeout字符串部分是否已經存在於連接字符串中?

另外,因爲它創建一個對象,它總是很好的在對象中賦值,而不是操縱字符串。

下面是代碼示例:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString); 

sscsb.ConnectTimeout = 30; 

var conn = new SqlConnection(sscsb.ConnectionString);