代码之家  ›  专栏  ›  技术社区  ›  Faisal

SqlException:超时已过期

  •  1
  • Faisal  · 技术社区  · 14 年前

    我有一个进程,其中两个线程在同一个表上连续执行sql查询。这两个线程中有一个可能会出现超时错误吗?如果是,那么避免这种情况的最佳做法是什么?

    我得到以下错误和结果是进程崩溃。

    4 回复  |  直到 14 年前
        1
  •  0
  •   user338195 user338195    14 年前

    听起来你的桌子上有锁。查看锁定机制。如果锁定整个表,则效率低下,相反,可以锁定表的子集,即行。

    同样在连接字符串中,可以减少超时。将其更改为2秒(建立连接的时间,而不是查询数据)。如果你真的犯了错误,你就可以从那里开始工作。

        2
  •  1
  •   Zephyr was a Friend of Mine    14 年前

    您可能会收到超时的原因有很多。如果收到连接异常,那么SqlConnection中的超时是多少?如果不是,那么SqlCommand中的命令超时是多少?

    您的查询结构是否正确?您希望查询返回多少行?这两张桌子有几行?

        3
  •  0
  •   Ben    14 年前

    用NOLOCK从MyTable中选择*

    这应该可以阻止任何锁定。

        4
  •  0
  •   Usman Masood    14 年前

    您应该对readuncommitted选项使用transactionscope,例如:

    var islolation=new TransactionOptions();
    isolation=IsolationLevel.ReadUncommitted;
    using(var scope=new TransactionScope(TransactionScopeOption.requiresnew,isolation))
    {
    //code here
    scope.complete();
    }