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