如何知道抛出SqlException的实际问题?

时间:2011-01-28 06:05:49

标签: c# ado.net sqlexception

我想以不同的方式处理不同的问题,同时进行数据库操作。

e.g。由于数据库凭据错误或由于网络问题,操作可能会失败。或者它可能会失败,因为查询不正确(如果在int类型列中传递字符串值)

在我的C#代码中,我们只有SqlException,其集合为SqlErrors。但是有很多严重程度。

如何轻松识别SqlException的原因?如何确定异常是由于连接问题或身份验证失败或由于查询问题。

我正在使用SQL Server 2005。

2 个答案:

答案 0 :(得分:9)

尝试这样的事情,这将有助于您处理不同的条件。

使用像这样的try catch块:

try    
{
  ...
  ...
}
catch (SqlException ex)
{
  switch (ex.Number) 
    { 
        case 4060: // Invalid Database 
                  ....
                  break;

        case 18456: // Login Failed 

                  ....

                  break;

        case 547: // ForeignKey Violation 

                  ....

                  break;

        case 2627: 
                // Unique Index/ Primary key Violation/ Constriant Violation 

                  ....

                  break;

        case 2601: // Unique Index/Constriant Violation 

                  ....

                  break;

        default: 

                  ....

                  break;    

       } 
}

答案 1 :(得分:1)

SQLException公开属性Class,它应该为您提供严重性级别。

更多信息here