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

5
当从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 Profiler显示,当程序超时时,脚本在30秒内运行并结束。

在SQL Server中,该脚本单独运行大约需要1分45秒,没有错误。

5个回答

6


1

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

SqlConnection 超时异常是在应用程序尝试建立连接但在给定时间段内未成功时引发的。我相信这个时间是500秒。

SqlCommand 超时决定了使用SQLCommand的应用程序等待SQL Server完成操作的时间长度。这个时间是30秒。

在设置SQLCommand时,将CommandTimeout更改为更高的值。

例如:

cmd.CommandTimeout = 300

0

最佳实践是尝试改进 SQL 以在不到 30 秒内运行。这比增加 VB 超时长度要好得多。

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

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

要显示执行计划。在 SQL Server 管理工具中运行此命令:

SET SHOWPLAN_XML ON

然后运行您的慢SQL。实际查询不会被执行,但执行计划将以XML格式显示。


0
如果使用Entity Framework,ModelsContainer上也存在CommandTimeout属性:
Using dbcontext As New MyDatabase.ModelsContainer()
    dbcontext.CommandTimeout = 120

    'Linq command'

End Using

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接