【问题标题】:Calling Stored Procedure from VB.net timeout error从 VB.net 调用存储过程超时错误
【发布时间】:2011-02-11 13:59:15
【问题描述】:

从 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 秒而没有错误。

【问题讨论】:

    标签: sql vb.net stored-procedures timeout


    【解决方案1】:

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

    默认为 30 秒。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

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

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

        SqlCommand 超时决定了一个命令为 使用 SQLCommand 等待 SQL Server 完成的应用程序 手术。这个是 30 秒。

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

        例如。

        cmd.CommandTimeout = 300
        

        【讨论】:

          【解决方案4】:

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

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

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

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

          SET SHOWPLAN_XML ON
          

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

          【讨论】:

            【解决方案5】:

            如果使用实体框架,ModelsContainer 上也存在 CommandTimeout:

            Using dbcontext As New MyDatabase.ModelsContainer()
                dbcontext.CommandTimeout = 120
            
                'Linq command'
            
            End Using
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-04-09
              • 2011-03-02
              • 2010-11-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多