【问题标题】:Catch table lock exception for sql anywhere ado.netado.net 在任何地方捕获 sql 的表锁定异常
【发布时间】:2015-08-07 07:31:47
【问题描述】:

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

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

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

非常感谢!

【问题讨论】:

  • 查看 SQL Anywhere 16 NET API 参考我找不到 SATableLockException,因此我不确定是否可以在不查看 Errors 属性的 SAError 列表的情况下检测到错误SAException 类。

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


【解决方案1】:

好的,我找到了解决方案。我只是将异常转换为SAException 并使用错误代码属性(谢谢@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... }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多