簡體   English   中英

從VB.net超時錯誤調用存儲過程

[英]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秒。

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
  • 表結構(列出索引)
  • 執行計划。

顯示執行計划。 在SQL Server Management Studio中運行以下命令:

SET SHOWPLAN_XML ON

然后運行你的慢速sql。 不會運行實際查詢,但執行計划將以xml格式顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM