【问题标题】:SQL Server TimeOut in C# After Adjusting timeout调整超时后 C# 中的 SQL Server TimeOut
【发布时间】:2017-10-02 18:50:40
【问题描述】:

我有一个用 C# 编写的 Windows 窗体应用程序,它将查询传递给 SQL Server 数据库,然后在 dataviewgrid 中显示结果。传递给数据库的查询取决于表单中选择的选项。

在管理工作室中运行一个特定的查询需要一分钟多一点的时间,但是当它从程序传递到数据库时会超时。以下是我为解决这种情况而采取的步骤:

  1. 通过在 sql 连接字符串中将连接超时选项设置为 300 秒,在程序中添加了 5 分钟超时。示例:Data Source=ab;Initial Catalog=abc;User ID=user; Password =pw; Connection Timeout=300

  2. 将 SQL Server 实例中的远程查询超时设置为 0(即无超时)。示例:EXEC sp_configure 'remote query timeout', 0 ; GO

这些选项都不起作用。尽管实现了它们,但 c# 程序在不到一分钟后就抛出了一个 sql 超时错误。

有解决办法吗?我已经在堆栈溢出上搜索了这个主题,到目前为止,所有建议都是做 1 或 2(我已经做过)。

作为参考,我使用的是 Visual Studio 17 社区版和 SQL Server 2016 开发者版。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: c# visual-studio-2017 sql-server-2016 connection-timeout


    【解决方案1】:

    SQL 命令有一个“CommandTimeout”属性。尝试设置。

    【讨论】:

      【解决方案2】:

      连接超时命令超时是两个不同的东西。

      连接超时 当在分配的超时期限内无法从连接池中检索连接时会发生。

      命令超时在检索到连接时发生,但是针对它执行的查询在分配的命令超时期限内没有返回结果。 ADO.NET 中默认的命令超时时间为 30 秒。

      如果您已将连接超时设置为 300 秒,但仍然出现超时,则可能是命令超时。正如 walkers01 所说,将您的命令超时设置为合适的秒数。 300 秒应该是绰绰有余了;如果您的查询在 SSMS 中在一分钟内执行,则 90 秒的超时就足够了。

      【讨论】:

        【解决方案3】:

        如果您使用的是 SqlDataAdapter,请尝试此方法以无限期执行查询。我用过这个,解决了我的问题。

         SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn);
                            dscmd.SelectCommand.CommandTimeout = 0;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-12
          • 1970-01-01
          • 1970-01-01
          • 2015-03-03
          • 2016-08-10
          • 1970-01-01
          • 2011-12-22
          相关资源
          最近更新 更多