SqlException:超时已过期

时间:2010-10-27 07:52:37

标签: .net sqlclient

我有一个进程,其中两个线程在同一个表上不断执行sql查询。这两个线程中的一个是否有可能出现Timeout错误?如果是这样,避免这种情况的最佳做法是什么?

我收到以下错误,导致进程崩溃。

超时已过期。操作完成之前经过的超时时间或服务器没有响应。

4 个答案:

答案 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();
}

也可以在查询执行后检查你是否正在关闭连接。