2015-06-10 44 views
3

我有存儲過程,當從SSMS調用併成功執行時需要大約10秒的時間運行。該過程以int作爲參數。從代碼調用的存儲過程超時,從SSMS執行正常

當代碼調用同一個存儲過程:

using (var connection = new SqlConnection(ConnectionStringName)) 
{ 
    using (var cmd = new SqlCommand("ProcedureName", connection)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add(new SqlParameter("@itemId", itemId)); 
     cmd.CommandTimeout = 150; 

     connection.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
} 

我得到的錯誤是:

System.Data.SqlClient.SqlException (0x80131904): Timeout expired. 
The timeout period elapsed prior to completion of the operation or the server is not responding. ---> 
System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out 

傳遞的參數是有效的,並呼籲從SSMS與存儲過程時它正確執行的參數值相同。

+0

從SSMS執行需要多長時間? – rikitikitik

+0

大約10秒鐘。 –

+0

@ shA.t刪除該行,我得到相同的異常,只有更快。 –

回答

2

爲了避免這種錯誤只需使用:

cmd.CommandTimeout = 0; 

注:
您所查詢的執行將需要不定式時間。

2

也許你忘了指定參數的方向,因爲你可以提供輸入和輸出參數。試試,如果這個工程:

SqlParameter param = new SqlParameter("@itemId", itemId); 
param.Direction = ParameterDirection.Input; 
cmd.Parameters.Add(param); 
+0

不,即使有這個變化,我也會得到同樣的錯誤。 –