我有一个进程,其中两个线程在同一个表上不断执行sql查询。这两个线程中的一个是否有可能出现Timeout错误?如果是这样,避免这种情况的最佳做法是什么?
我收到以下错误,导致进程崩溃。
超时已过期。操作完成之前经过的超时时间或服务器没有响应。
答案 0 :(得分:1)
您可能会收到超时的原因有很多。如果您遇到连接异常,那么SqlConnection中的超时是多少?如果没有那么SqlCommand中的命令超时是多少?
您的查询结构合理吗?您希望查询返回多少行?这两个表中有多少行?
答案 1 :(得分:0)
听起来你已经锁定了桌子。研究锁定机制。如果你锁定整个表,它效率很低,相反,你可以锁定表的一个子集,即 - 行。
同样在您的连接字符串中,您可以减少超时。将其更改为2秒(建立连接的时间,而不是查询数据)。如果你确实得到了那个错误,那么你可以从那里开始工作。
答案 2 :(得分:0)
如果您的查询只是阅读,而不是更新或插入,您可以使用NOLOCKS。
SELECT * FROM MyTable With NOLOCK
这应该停止任何锁定。
答案 3 :(得分:0)
听起来像表格锁定...... 你应该使用带有ReadUncommited选项的事务管理器,例如:
var islolation=new TransactionOptions();
isolation=IsolationLevel.ReadUncommitted;
using(var scope=new TransactionScope(TransactionScopeOption.requiresnew,isolation))
{
//code here
scope.complete();
}
也可以在查询执行后检查你是否正在关闭连接。