从 sql 数据库中检索数据,并且不会遇到超时异常
本文关键字:遇到 异常 超时 数据库 sql 检索 数据 | 更新日期: 2023-09-27 17:55:59
我运行下面的代码从sql中提取数据,q
是我使用的查询。数据集很大,需要> 2 分钟才能带来不幸的是,我得到了一个例外:
未处理的异常:System.Data.SqlClient.SqlException:超时 过期。 在 操作完成或服务器没有响应。 尝试连接时发生此故障 CT 到路由目的地。--->系统.组件模型.Win32异常:等待操作超时 ---内部异常堆栈跟踪结束--- at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action'1 wr apCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, boolean callerHa sConnectionLock, Boolean asyncClose)
如何解决它,尽管有时间,我将能够检索我需要的所有数据。
List<string> dataList = new List<string>();
using (SqlConnection connection = new SqlConnection(csb.ConnectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(q, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
dataList .Add(reader.GetString(0));
}
}
}
}
}
您必须设置 SQL 命令的 Timeout 属性,以便该查询仅在等待了几秒钟后才会引发超时异常。
超时是一个整数值,用于指定在引发超时异常之前等待的秒数。
请检查 SqlCommand.CommandTimeout
根据 MSDN,默认值为 30 秒。
这个 SO 答案为使用超时提供了很好的建议。(引文如下)
对于大多数查询,1 分钟的超时似乎是合理的。一个 8+ 小时 超时似乎不合理。
您是否有预计花费超过一分钟的查询?如果 因此,将其提高到您期望高于您期望的任何值的值 看看一切是否正常工作,但不要高到服用 永远提醒您注意问题。(例如,您可能从 1 分钟到 5 分钟。
奖金(来源):
将命令超时设置为零将删除时间限制,在以下情况下 等待查询运行。
但是,如果数据库脱机,程序将等待 无限期地为不会发生的事情,所以你应该 请考虑改为设置较长的时间,以便命令超时 最终而不是永远不会。
按如下方式修改代码应该允许命令有足够的时间返回结果:注意:使用3分钟
using (SqlCommand command = new SqlCommand(q, connection))
{
command.CommandTimeout = 180;
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
dataList .Add(reader.GetString(0));
}
}
}
}
详细信息: SqlCommand.CommandTimeout