System.Data.SqlClient.SqlException(等待操作超时)仅在调试时
Posted
技术标签:
【中文标题】System.Data.SqlClient.SqlException(等待操作超时)仅在调试时【英文标题】:System.Data.SqlClient.SqlException (The wait operation timed out) when debugging only 【发布时间】:2022-01-11 23:43:04 【问题描述】:即使在调试时,代码也适用于较小的查询。我尝试了一些更大的查询,它适用于服务器/实时版本,但在使用 Visual Studio 进行调试时不起作用。我用 SSMS 尝试了相同的查询,它运行良好,速度也很快。
查询是通过存储过程进行的:
using (SqlConnection conn = new SqlConnection(CONNECTION_STRING))
partialReport = conn.Query<MonthlyReporting>("PartialReport", new ClassLevel = (int)instruct, StartDate = startDate, EndDate = endDate, IncludeMarried = includeMarried , commandType: CommandType.StoredProcedure).ToList();
// program does stuff here
完整的异常细节是:
System.Data.SqlClient.SqlException HResult=0x80131904 消息=执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。
Source=.Net SqlClient 数据提供者
堆栈跟踪: 无法评估异常堆栈跟踪
内部异常 1: Win32Exception: 等待操作超时
服务器和调试版本的代码是相同的,调试数据库与服务器/实时数据库相同(尽管早了几天)。同样,CONNECTION_STRING 不同,分别指向调试/实时数据库。
再一次,即使在使用较小的查询进行调试时,这也确实有效。
【问题讨论】:
这是客户端超时。增加 SqlConnection.CommandTimeout 和/或对服务器上的查询执行进行故障排除。见docs.microsoft.com/en-us/sql/relational-databases/performance/… 您很可能在该服务器上遇到了缓慢的查询。请通过brentozar.com/pastetheplan 分享两台服务器的查询计划。还请edit 并将存储过程、表和索引定义添加到您的帖子中 【参考方案1】:我基本上什么都不做。我在代码的不同部分遇到了同样的问题,但我在错误后按了继续。我刷新了几次页面,看看是否与出现错误所用的时间有任何一致性。我这样做是因为我尝试更改连接超时但没有成功(刷新是使用我原来的连接超时设置完成的)。刷新几次后,问题就消失了(在代码中的两个位置)。 我认为问题是当我将数据库从实时版本/服务器复制到本地调试版本时引起的。
【讨论】:
建议增加SqlConnection.CommandTimeout
的时长。
我将连接字符串中的 Connect Timeout 属性从 30 更改为 120,但没有成功。我仍然收到错误消息。暴力刷新六次后,问题就消失了。仍然不确定根本原因。以上是关于System.Data.SqlClient.SqlException(等待操作超时)仅在调试时的主要内容,如果未能解决你的问题,请参考以下文章