从VB.net超时错误调用存储过程

时间:2010-04-23 15:12:42

标签: sql vb.net stored-procedures timeout

如果在连接字符串中没有指定超时,那么从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秒,无错误。

5 个答案:

答案 0 :(得分:5)

执行SQL的超时值未存储在连接字符串中,它存储在SqlCommand SqlCommand.CommandTimeout中。

默认为30秒。

答案 1 :(得分:1)

答案 2 :(得分:1)

Ther是SqlClient可以引发的两种类型的超时异常 对象:SqlConnection和SqlCommand。

当应用程序尝试建立时,会引发

SqlConnection 超时异常 连接但在给定时间段内未成功。我相信这是500秒。

SqlCommand 超时决定命令的执行时间 使用SQLCommand等待SQL Server完成的应用程序 操作。这个是30秒。

设置SQLCommand时,将CommandTimeout更改为更高

例如。

cmd.CommandTimeout = 300

答案 3 :(得分:0)

最佳做法是尝试将SQL改进为在不到30秒的时间内运行。这比增加VB超时长度要好得多。

要获得有关SQL性能问题的最佳帮助,请发布以下内容:

  • 实际的sql
  • 表结构(列出索引)
  • 执行计划。

显示执行计划。在SQL Server Management Studio中运行以下命令:

SET SHOWPLAN_XML ON
然后运行你的慢速sql。不会运行实际查询,但执行计划将以xml格式显示。

答案 4 :(得分:0)

如果使用Entity Framework,则ModelsContainer上也存在CommandTimeout:

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

    'Linq command'

End Using