【问题标题】:ADO.net connection timedout before the connection timeout valueADO.net 连接在连接超时值之前超时
【发布时间】:2012-11-03 20:59:13
【问题描述】:

我们有一个连接到 SQL Server 2008 R2 数据库的 WCF 数据服务。当服务尝试从数据库访问数据时,连接在连接超时值之前超时并引发超时异常。

这是连接字符串:

Data Source=XXXX;Initial Catalog=XXXX;MultipleActiveResultSets=False;
Connection Timeout=80;Integrated Security=false;User ID=XXX;Password=XXX

在这个连接字符串中,即使我们将 80 秒作为 Connection Timeout,连接也会在 700 毫秒左右超时并抛出异常

System.Data.SqlClient.SqlException (0x80131904):超时 已过期。
在完成之前超时时间已过 操作或服务器没有响应。

这仅发生在某些查询上。

感谢任何帮助。

【问题讨论】:

  • 打开连接或通过连接执行命令时是否超时?有两种超时类型:连接超时和命令超时。后者是在命令中设置的。

标签: wcf sql-server-2008 ado.net


【解决方案1】:

导致错误的不是ConnectionTimeout;这是CommandTimeout。另见this question

因此,解决方案是为CommandTimeout 设置更高的值,以防查询成本更高。

【讨论】:

    【解决方案2】:

    这种类型的超时可能有三种原因;

    1. 某处出现死锁

    2. 数据库的统计信息和/或查询计划缓存不正确

    3. 查询太复杂,需要调优

    取自以下链接

    Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. The statement has been terminated

    尝试优化这里提到的查询

    【讨论】:

    • 是的,我现在看到了。根据 Sivvala,只有一些查询会导致此错误。所以如果我们设置SqlCommand.CommantTimeout=0,希望问题能解决
    • 是的,但我认为不建议将其设置为 0;我通常更喜欢设置执行时间的限制。
    • 是的,我同意他应该尝试优化长期运行的查询。
    • 将其设置为 0 只是为了诊断问题。您需要优化查询或至少将超时设置为您愿意让用户等待的合理时间。
    • 这里的命令在 700 毫秒左右超时,但根据 msdn 文档,命令超时的默认值为 30 秒。
    【解决方案3】:

    我遇到了同样的问题,谷歌把我带到了这里。

    超时。在操作完成之前超时时间已过或服务器没有响应。

    在我的例子中,数据库服务器上的 mssql 防火墙端口(默认 = 1433 TCP)尚未打开。

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2013-09-03
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多