SqlException的ErrorCode返回-2146232060而不是26(找不到服务器实例)

4
我将尝试处理一个异常,我知道它的 ErrorCode 是 26,但它并没有返回正确的整数,而是给了我 -2146232060。
这是 QuickWatch 显示的异常说明截图: 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
@Markus Deibel 抱歉,我表达不够清楚,所以我在第二段代码片段的结尾进行了编辑 :) - Jean Mogo
1
可能是SqlException ErrorCodes的重复问题。 - Markus Deibel
@MarkusDeibel 这绝不是那个问题的重复。在做出假设之前,请先阅读问题。 - AnotherProgrammer
1个回答

4

我认为你需要关注的是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

关于SqlException的更多信息,请参见MSDN,关于您收到的具体错误,请参见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接