【问题标题】:SQL timeout expired in C# codeC# 代码中的 SQL 超时已过期
【发布时间】:2013-12-11 19:40:08
【问题描述】:

我在一个新的 C# 项目中工作,需要一些帮助。

系统有一些使用 Quartz api 安排的作业,其中一个不再工作。

我尝试手动执行该方法并收到此错误

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

在这一行(调用了 catch{}):

TList<TbBooking> allBooks = DataRepository.TbBookingProvider.Find(bQuery);

变量 bQuery 有一个包含 4200 个 ID 和一些参数的查询,例如 1 个月期间、标志等。

我检查了 SQL 超时设置,它是 10 分钟(默认值),但在代码输入 .Find() 方法(不到 2 分钟)后几秒钟内就会出现消息,但使用 SQLMS 查询执行得非常快.

我正在考虑运行命令 sp_updatestats 但我想先看看你的建议。

附言该项目正在使用 codesmith,并且此功能自 2010 年以来一直在运行。

【问题讨论】:

  • 在一个巨大的表上缺少索引? (查询是否随着时间的推移运行较慢?)或者在其他地方可能有一个锁阻止查询执行? (对于相同数量的项目,这是突然出现的问题吗?)另外,在 SSMS 中直接运行命令时的性能如何? (计划显示了什么。)
  • 我怀疑问题出在我的应用程序中,因为查询不到 10 秒就返回了结果。我更改了 defaultCommandTimeout。

标签: codesmith


【解决方案1】:

我使用了 sp_updatestats,但它不起作用。我为该列创建了一个索引,但也没有用。所以我在 ProviderBase 类中发现一个名为 defaultCommandTimeout 的属性设置为 30 秒。我在我的 app.config 文件中将其更改为 120,查询再次起作用。

【讨论】:

    猜你喜欢
    • 2011-02-28
    • 2013-11-23
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2014-09-07
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多