在Dapper.NET中调整CommandTimeout

本文关键字:调整 CommandTimeout NET Dapper | 更新日期: 2023-09-27 18:19:54

我正试图通过Dapper通过存储过程运行SQL备份(我的应用程序的其余部分使用Dapper,所以我更希望这部分也能通过它运行)。它工作得很好,直到CommandTimeout启动。

using (var c = SqlConnection(connstring))
{
    c.Open();
    var p = new DynamicParameters();
    // fill out p
    c.Execute("xp_backup_database", p, commandType: CommandType.StoredProcedure);
}

我所知道的唯一CommandTimeout设置是在SqlCommand中。有没有办法通过Dapper设置?

在Dapper.NET中调整CommandTimeout

是的,Execute函数有多个版本。其中一个(或多个)包含commandTimeout参数:

public static int Execute(this IDbConnection cnn, string sql, 
                dynamic param = null, IDbTransaction transaction = null, 
                            int? commandTimeout = null, CommandType? commandType = null)

取自SqlMapper.cs

添加接受答案的原始问题示例,以防有人想要。(超时设置为60秒):

using (var c = SqlConnection(connstring))
{
    c.Open();
    var p = new DynamicParameters();
    // fill out p
    c.Execute("xp_backup_database", p, commandTimeout: 60, 
                                       commandType: CommandType.StoredProcedure);
}

无需为所有查询/Db调用设置命令超时。您可以像下面这样在全局范围内设置它。

Dapper.SqlMapper.Settings.CommandTimeout = 0;

您可以在应用程序加载时或在数据库类构造函数中初始化此静态属性。

这有助于消除重复,如果您以后决定更改它,您可以在一个地方更改一次。

我能够使用连接解决我的问题。查询直接设置超时

int timeOutInSeconds = 60;
.
.
.
result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();