Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Dapper.NET中调整CommandTimeout?_C#_.net_Timeout_Dapper - Fatal编程技术网

C# 在Dapper.NET中调整CommandTimeout?

C# 在Dapper.NET中调整CommandTimeout?,c#,.net,timeout,dapper,C#,.net,Timeout,Dapper,我正试图通过Dapper通过存储过程运行SQL备份(我的应用程序的其余部分使用Dapper,所以我更愿意让这部分也通过Dapper运行)。在命令超时生效之前,它可以正常工作 using (var c = SqlConnection(connstring)) { c.Open(); var p = new DynamicParameters(); // fill out p c.Execute("xp_backup_database", p, commandTyp

我正试图通过Dapper通过存储过程运行SQL备份(我的应用程序的其余部分使用Dapper,所以我更愿意让这部分也通过Dapper运行)。在命令超时生效之前,它可以正常工作

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进行设置?

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

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

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


不需要为所有查询/Db调用设置命令超时。您可以如下所示进行全局设置

Dapper.SqlMapper.Settings.CommandTimeout = 0;
可以在应用程序加载或数据库类构造函数中初始化此静态属性


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

我可以使用connection.Query解决我的问题 直接设置超时

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

无论出于何种原因,我现在无法回答自己的问题。但似乎只是将命名参数“commandTimeout:0”添加到c中。Execute()解决了这个问题。我也遇到了同样的问题,但对于Query方法,解决方案也很有效,因为它也有commandTimeout参数。@DrSchizo为什么不使用它,异步等待没有理由避免时间out@DrSchizo文档说它不用于像BeginExecuteReader这样的异步方法,而不是async/await。我认为这是因为如果您使用BeginExecuteReader,则假定您将使用自己的超时逻辑。是否可以为所有查询设置此超时?我尝试了
SqlConnection.ConnectionTimeout属性
,但它说它是只读的。我需要一些自定义迁移程序。在每一条语句中键入它都很乏味。@jedatkinports SqlMapper.Settings.CommandTimeout我相信这就是您想要的。
int timeOutInSeconds = 60;
.
.
.
result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();