[英]Calling Stored Procedure from VB.net timeout error
如果在連接字符串中沒有指定超時,那么從vb.net調用存儲過程時是否存在默認的SQL超時時間? 我不確定連接字符串中是否指定了CommandTimeout
但是我正在瀏覽所有可能性。
示例如果在30秒(或更多)之后沒有結果拋出:
`System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.`
SQL事件探查器說,當程序超時時,腳本會在30秒內運行並結束。
該腳本在SQL Server中自行運行大約1分45秒。
用於執行SQL的超時值不被存儲在連接字符串中,它被保存在SqlCommand
作為SqlCommand.CommandTimeout
。
默認值為30秒。
SqlCommand cmd;
.....
cmd.CommandTimeout = 120;
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx
Ther是SqlClient對象可以引發的兩種類型的超時異常:SqlConnection和SqlCommand。
當app嘗試建立連接但在給定時間段內未成功時,會引發SqlConnection超時異常。 我相信這是500秒。
SqlCommand Timeout決定為使用SQLCommand等待SQL Server完成操作的應用程序提供命令的時間長度。 這個是30秒。
設置SQLCommand時,將CommandTimeout更改為更高
例如。
cmd.CommandTimeout = 300
如果使用Entity Framework,則ModelsContainer上也存在CommandTimeout:
Using dbcontext As New MyDatabase.ModelsContainer()
dbcontext.CommandTimeout = 120
'Linq command'
End Using
最佳做法是嘗試在不到30秒的時間內改進SQL。 這比增加VB超時長度要好得多。
要獲得有關SQL性能問題的最佳幫助,請發布以下內容:
顯示執行計划。 在SQL Server Management Studio中運行以下命令:
SET SHOWPLAN_XML ON
然后運行你的慢速sql。 不會運行實際查詢,但執行計划將以xml格式顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.