C# 如何知道引发哪个SqlException的实际问题?

C# 如何知道引发哪个SqlException的实际问题?,c#,ado.net,sqlexception,C#,Ado.net,Sqlexception,我希望在执行数据库操作时以不同的方式处理不同的问题 e、 g.操作可能因错误的数据库凭据或网络问题而失败。或者,如果在int-type列中传递字符串值,则可能会因为查询不正确而失败 在我的C代码中,只有SqlException,它包含SqlErrors集合。然而,有许多严重性级别 如何轻松确定SqlException的原因?如何确定异常是由于连接问题、身份验证失败还是由于查询问题造成的 我使用的是SQL Server 2005。SQLException公开了属性类,该属性类应为您提供严重性级别

我希望在执行数据库操作时以不同的方式处理不同的问题

e、 g.操作可能因错误的数据库凭据或网络问题而失败。或者,如果在int-type列中传递字符串值,则可能会因为查询不正确而失败

在我的C代码中,只有SqlException,它包含SqlErrors集合。然而,有许多严重性级别

如何轻松确定SqlException的原因?如何确定异常是由于连接问题、身份验证失败还是由于查询问题造成的

我使用的是SQL Server 2005。

SQLException公开了属性类,该属性类应为您提供严重性级别


更多信息。

尝试类似的方法,这将帮助您处理不同的情况

使用如下所示的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;    

       } 
}

我也试图找到一个通用的解决方案。我的目标是向最终用户提供更友好的错误消息。到目前为止,我还没有找到有效的解决方案。你是从哪里得到这些具体数字的?我想要这些数字还有一些原因,如网络故障等。SQL中的系统消息表提供了数千条消息,因此这对我来说并不方便。@CSharpLearner:我从各种来源获得了这些错误消息,如博客和我项目中的早期代码等。可能您可以从数据库中获取这些错误代码,尝试此查询SELECT*FROM SYSMESSAGES此答案应提及这只是中第一个异常的包装。因此,您必须循环该集合。