在Dapper.NET中调整CommandTimeout?

sh-*_*eta 75 .net c# 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);
}
Run Code Online (Sandbox Code Playgroud)

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

jza*_*ruk 88

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

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

取自SqlMapper.cs

  • @jedatkinports SqlMapper.Settings.CommandTimeout我相信你所追求的. (5认同)
  • 我有同样的问题,但使用Query方法,但解决方案也适用于它,因为它也有一个commandTimeout参数. (3认同)
  • 是否可以为所有查询设置此超时?我尝试使用`SqlConnection.ConnectionTimeout 属性`,但它说它是只读的。对于一些自定义迁移程序,我需要它。每条语句都键入它很乏味。 (3认同)
  • @DrSchizo为什么不使用它,Async Await没有理由避免超时 (2认同)

Adr*_*arr 49

原始问题的示例和已接受的答案,如果有人想要的话.(超时设置为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);
}
Run Code Online (Sandbox Code Playgroud)


Moz*_*eeb 27

无需为所有查询/数据库调用设置命令超时。您可以像下面这样全局设置。

Dapper.SqlMapper.Settings.CommandTimeout = 0;
Run Code Online (Sandbox Code Playgroud)

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

这有助于消除重复,如果您决定稍后更改,只需更改一次。


Ama*_*ata 6

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

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