2010-04-23 72 views
4

從vb.net調用存儲過程時,如果在連接字符串中未指定超時,是否存在默認的SQL超時時間? 我不確定在連接字符串中是否指定了CommandTimeout,但我正在經歷所有可能情況。從VB.net調用存儲過程超時錯誤

實施例,如果30秒(或更多)之後沒有結果扔:

`System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.` 

SQL探查說,腳本運行,並且當程序timesout ..

裏邊反腳本運行沒有在30秒內結束在SQL服務器中大約1分45秒自身出錯。

回答

0

最佳做法是嘗試改善SQL在少於30秒內運行。這比增加VB超時長度要好得多。

爲了獲得與SQL性能問題最好的幫助,發佈如下:

  • 實際的SQL
  • 表結構(上市索引)
  • 的執行計劃。

顯示執行計劃。在SQL Server Management Studio中運行此命令:

SET SHOWPLAN_XML ON 

然後運行您的慢sql。實際查詢將不會運行,但執行計劃將以xml格式顯示。

1

Ther是兩種類型的超時異常,可由SqlClient 對象引發:SqlConnection和SqlCommand。

的SqlConnection超時異常升高時,應用程序正在嘗試建立給定的時間內 連接,但沒有成功。我相信這是500秒。

的SqlCommand超時決定命令的時間多長,它使用的SqlCommand等待SQL Server來完成 操作 應用給出。這個是30秒。

當設置的SqlCommand,更改將CommandTimeout要高

例如。

cmd.CommandTimeout = 300 
0

如果使用實體框架的CommandTimeout也存在於ModelsContainer:

Using dbcontext As New MyDatabase.ModelsContainer() 
    dbcontext.CommandTimeout = 120 

    'Linq command' 

End Using