【问题标题】:SqlException ErrorCode returns -2146232060 instead of 26 (Can't find server instance)SqlException ErrorCode 返回 -2146232060 而不是 26(找不到服务器实例)
【发布时间】:2018-12-04 11:54:11
【问题描述】:

我正在尝试处理一个异常,我知道它的 ErrorCode 是 26,但它没有返回正确的整数,给我 -2146232060。

Screenshot of QuickWatch with the exception description

所以不要写这个:

catch (SqlException e)
{
    if (e.ErrorCode == 26)
    {
        //my code
    }
}

我必须使用这个:

catch (SqlException e)
{
    if (e.Message.ToUpper().Contains("ERROR: 26"))
    {
        //my code
    }
}

为什么它返回 -2146232060,我怎样才能得到 26,这样我就不需要比较所有字符串值了?

【问题讨论】:

  • 问题是什么?
  • @Markus Deibel 对不起,我不够清楚,所以我在第二个代码 sn-p 的末尾编辑了它:)
  • SqlException ErrorCodes的可能重复
  • @MarkusDeibel 这根本不是那个问题的重复。请在做出假设之前阅读问题。

标签: c# sql-server visual-studio exception try-catch


【解决方案1】:

我认为您要查看的是 SqlException.Number(这是 SQL 的错误号)而不是 SqlException.ErrorCode(这是 SQL 驱动程序错误号)。

static void Main(string[] args) {
    try {
        var connection = new SqlConnection(@"Data Source=(localdb)\mssqllocaldb;Initial Catalog=Sandbox;Integrated Security=SSPI;");
        connection.Open();
        var command = new SqlCommand("throw 50000, 'oops', 1;", connection);
        command.ExecuteNonQuery();
    }
    catch (SqlException ex) {
        Console.WriteLine(ex.ErrorCode + ": " + ex.Number + ": " + ex.Message);
        for (int i = 0; i < ex.Errors.Count; i++)
            Console.WriteLine(ex.Errors[i].Number + ": " + ex.Errors[i].Message);
    }
    catch (Exception ex) {
        Console.WriteLine(ex.Message);
    };
}

...产生...

-2146232060: 50000: oops
50000: oops

有关MSDN 上的SqlException 以及您收到here 的具体错误的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-16
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多