C# 在Dapper.NET中调整CommandTimeout?
我正试图通过Dapper通过存储过程运行SQL备份(我的应用程序的其余部分使用Dapper,所以我更愿意让这部分也通过Dapper运行)。在命令超时生效之前,它可以正常工作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
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();