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

最佳答案

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

静态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特定错误的更多信息。

关于c# - SqlException ErrorCode返回-2146232060,而不是26(找不到服务器实例),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51031381/

10-11 06:33