2014-09-23 63 views
9

我有一個運行存儲過程的C#程序。如果我從Microsoft sql server management studio運行存儲過程,它工作正常。它需要大約30秒的時間來執行。但是,如果我嘗試從C#程序運行相同的存儲過程,它會超時,即使我已將連接字符串中的超時設置爲10分鐘。如何在使用SqlCommand執行存儲過程時防止出現超時錯誤?

using (connection1 = new SqlConnection("user id=user_id_goes_here;password=password_goes_here;initial catalog=database_name_goes_here;data source=server_name_goes_here;connection timeout=600)) 

即使我已經設置爲允許10分鐘(用於測試目的),似乎在大約30秒後超時。

+1

你打電話過程如何?管理工作室需要30秒鐘的時間不應該花費C#10分鐘,除非您在某處破壞索引或統計信息時發生錯誤。 – 2014-09-25 16:26:57

回答

17

連接中的超時僅用於連接到數據庫。

SqlCommand類有一個單獨的CommandTimeout屬性,我認爲這是你用來執行存儲過程的東西。使用此屬性來指定執行超時。

即,

using (SqlCommand cmd = new SqlCommand()) 
{ 
    cmd.Connection = connection1; 
    cmd.CommandTimeout = 240; //in seconds 
    //etc... 
} 
+3

如果你使用0,這意味着沒有限制。 – Juan 2014-09-24 12:48:11

+2

只是要指出,這只是針對該問題的「樂隊援助」。通過解決潛在的問題,最好弄清楚爲什麼你首先得到暫停。 – 2014-09-24 20:47:39

+1

@ChrisDunaway我假設你從未在大型數據庫上工作過?我曾經在項目SPs中工作了幾個小時,整合了terabyte級別的數據集。有時候你只需要時間來做事。 – TomTom 2014-09-25 12:06:14

6

使用SqlCommand.CommandTimeout命令的屬性而不是在連接字符串中指定它。

請參閱MSDN以供參考。

2

您需要在代碼中設置它,即設置sql命令對象的CommandTimeout屬性。

連接字符串中的參數'連接超時'表示在終止嘗試並生成錯誤之前嘗試建立連接時等待的時間。現在不是查詢執行超時的時間。

謝謝,幾周前我也遇到了同樣的問題,並且在webconfig中的超時值與命令對象之間混淆了。清除你的問題現在有我的疑問:)

reference link from msdn

1

連接超時是指允許的時間居然同時連接到SQL Server的金額。命令超時指的是命令運行允許的時間長度;在這種情況下,存儲過程。 SqlCommand.CommandTimeout是你正在尋找的財產。

相關問題