在Dapper.NET中调整CommandTimeout?

时间:2012-01-09 20:36:59

标签: c# .net timeout dapper

我正在尝试通过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设置这个?

4 个答案:

答案 0 :(得分:79)

是的,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

答案 1 :(得分:45)

添加已接受答案的原始问题示例,以防有人想要。 (超时设置为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);
}

答案 2 :(得分:10)

无需为所有查询/ Db呼叫设置命令超时。您可以像下面这样全局设置。

Dapper.SqlMapper.Settings.CommandTimeout = 0;

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

这有助于删除重复项,如果以后决定更改它,则只需更改一次。

答案 3 :(得分:0)

我能够使用connection.Query解决问题 直接设置超时时间

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