问题是我在 for循环中查询数据库以获取分页记录集时遇到超时错误。每个循环并不昂贵,但是使用相同的连接对象查询30秒以上会导致事务/超时错误:
我尝试为Dapper查询添加commandTimeout属性,并在app.config中添加Connection Timeout(两者都超过30秒),但是它没有任何影响。
int pages = totalCount / pageSize;
for(int pageNumber = 1; pageNumber <= pages; pageNumber++){
string sql = @"select * from MyTable order by 1 desc offset @pageSize * (@pageNumber-1) rows fetch next @pageSize rows only;";
_connection.Query<MyEntity>(sql, param: new {pageSize, pageNumber}).ToList();
}
与当前连接关联的事务已完成,但尚未处理。必须先处理事务,然后才能使用该连接执行SQL语句
答案 0 :(得分:0)
事实证明,导致此问题的数据库层顶部有一个外部库的包装dll:
public static readonly TimeSpan DefaultTransactionTimeout = TimeSpan.FromSeconds(30);
覆盖此行为可解决此问题。