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

时间:2018-06-25 20:30:08

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

我正在尝试处理一个异常,我知道它的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,所以我不需要比较所有字符串值?

1 个答案:

答案 0 :(得分:2)

我认为您要查看的是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的特定错误的更多信息。