在ado.net的任何地方为sql捕获表锁异常

时间:2015-08-07 07:31:47

标签: c# sql ado.net sqlanywhere table-lock

使用ado.net和iAnywhere.Data.SqlAnywhere.EF6捕获表锁定异常的最佳方法是什么?我的问题是,command.ExecuteNonQuery导致包含该消息的SAException,用户已锁定表中的所有行。

问题是,它是一般的SAException,而不是像SATableLockException这样的特定的一个,这会很好。

现在问题:如何在不使用错误消息的情况下检测错误是表锁定异常?

非常感谢!

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。我只是将异常转换为SAException并使用了Error-Code属性(谢谢@tzup):

示例:

try
{
    // Maybe some sa-exception occurse
}
catch (Exception ex)
{
    if (ex is iAnywhere.Data.SQLAnywhere.SAException)
    {
        var saException = (iAnywhere.Data.SQLAnywhere.SAException)ex;

        // Only catch table locks
        if (saException.NativeError == -210 || saException.ErrorCode == -210
             || saException.NativeError == -1281 || saException.ErrorCode == -1281)
        {
            // Table lock here!
        }
    }
    else { // do some thing else... }
}