SQL 调整超时后 C# 中的服务器超时

SQL Server TimeOut in C# After Adjusting timeout

我有一个用 C# 编写的 windows 表单应用程序,它将查询传递给 SQL 服务器数据库,然后在数据视图网格中显示结果。传递到数据库的查询取决于在表单中选择的选项。

在 Management Studio 中,一个特定的查询 运行 需要一分多钟的时间,但是当它从程序传递到数据库时会超时。以下是我为解决此问题所做的步骤:

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

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

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

有解决办法吗?我搜索了关于堆栈溢出的这个主题,到目前为止所有的建议都是执行 1 或 2(我已经完成)。

作为参考,我使用的是 Visual Studio 17 Community Edition 和 SQL Server 2016 Developer Edition。

如有任何帮助,我们将不胜感激。

谢谢!

SQL 命令中有一个 "CommandTimeout" 属性。尝试设置它。

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

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

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

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

如果您使用的是 SqlDataAdapter,请试试这个无限时间的查询执行。我用过这个,解决了我的问题。

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