C#中的SQL Server TimeOut调整超时后

时间:2017-10-02 18:50:41

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

我有一个用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

  3. 这些选项都不起作用。尽管实现了这两个,但c#程序在不到一分钟的时间内就会抛出一个sql超时错误。

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

    供参考,我使用的是Visual Studio 17社区版和SQL Server 2016 Developer Edition。

    非常感谢任何帮助。

    谢谢!

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

连接超时命令超时是两回事。

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

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

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

答案 2 :(得分:0)

如果使用SqlDataAdapter,请尝试执行此操作以无限制地执行查询。我已经使用了这个,解决了我的问题。

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