c# - 如何更改查询超时
问题描述
对于有很多记录的查询,我有超时问题。如何更改查询超时?
我尝试以这种方式更改超时连接,但它不起作用:
连接.ConnectionTimeout = 60; // 不工作(准备好)
班级:
public abstract class RepositoryBase<TEntity> : IRepositoryBase<TEntity>, IDisposable where TEntity : class
{
protected SqlConnection _connection;
protected string _connectionString;
public RepositoryBase(string connectionString)
{
_connectionString = connectionString;
SqlConnection connection = new SqlConnection(connectionString);
if (connection.State == ConnectionState.Closed)
connection.ConnectionTimeout = 60; // not working (ready)
connection.Open();
_connection = connection;
}
public List<T> GetEntitiesByQuery<T>(string Query)
{
using (var connection = _connection)
{
try
{
var entities = connection.Query<T>(Query);
return entities.ToList();
}
catch (Exception ex)
{
throw ex;
}
finally
{
connection.Close();
}
}
}
}
解决方案
您需要设置CommandTimeout
属性:
等待命令执行的时间(以秒为单位)。默认值为 30 秒。
如何设置取决于使用的数据访问技术。
对于普通的 ADO.NET:
IDbCommand cmd = ...;
cmd.CommandTimeout = 120; // 2 min
对于 EF6:
DbContext db = ...;
db.Database.CommandTimeout = 120; // 2 min
但看起来你正在使用Dapper。使用的Query<T>
方法目前具有以下签名:
public static IEnumerable<T> Query<T>(
this IDbConnection cnn,
string sql,
object param = null,
IDbTransaction transaction = null,
bool buffered = true,
int? commandTimeout = null,
CommandType? commandType = null
)
如您所见,有很多可选参数,其中之一就是commandTimeout
您需要的。所以你可以使用这样的东西:
var entities = connection.Query<T>(Query, commandTimeout: 120);
或者您可以为所有查询设置默认超时:
SqlMapper.Settings.CommandTimeout = 120; // 2 min
推荐阅读
- smtp - 从 GitHub 重新下载后 PHPMailer 6.0.5 无法正常工作 - 语法错误
- javascript - jQuery:tablesorter 无法处理使用 jquery load() 加载的表
- unity3d - Unity 2D 反射/弹跳
- python - 在列表推导中处理 lambda 表达式中的元组
- c# - 如何在 Frames/IFrames 中获取 HtmlElement 值?
- azure - Azure 中的 Powershell 脚本
- plugins - 您可以在 Adobe XD 插件中使用 ES2015+ 功能 (ES6) 吗?
- javascript - 使用 onsubmit 验证表单后显示模式
- java - 比较两个数组时出现问题
- java - 在我设计用于模拟多米诺骨牌之家的java项目中,代码多次将我的输入用于大小时出现错误