C# 如何确定它是否是引用完整性冲突异常
如果异常是由于引用完整性冲突引起的,那么我想通过下面的方法检查catch{}子句;是否有更好的/优雅的/更合适的方法来确定其是否为引用完整性异常C# 如何确定它是否是引用完整性冲突异常,c#,.net,sql-server,entity-framework,ado.net,C#,.net,Sql Server,Entity Framework,Ado.net,如果异常是由于引用完整性冲突引起的,那么我想通过下面的方法检查catch{}子句;是否有更好的/优雅的/更合适的方法来确定其是否为引用完整性异常 public static bool IsReferencialIntegrityExcpetion(this Exception exception) { return exception is SqlException && exception.Messa
public static bool IsReferencialIntegrityExcpetion(this Exception exception)
{
return exception is SqlException &&
exception.Message.Contains("The DELETE statement conflicted with the REFERENCE constraint ");
}
无论是什么原因(RI、约束、类型不匹配、大小不匹配等),数据库返回的任何错误都会引发
SqlException
。您不能只捕获基于RI的异常,但是您可以始终检查异常(通过查看消息,或者最好通过查看Errors
属性,查看异常的状态)和throw如果您实际上不想处理特定的异常,请再次执行代码>操作(请注意,它只是抛出;
,而不是抛出ex;
,因为这样做会保留堆栈跟踪)。您所能做的最好方法是捕获异常,而不是异常。然后,您可以使用(547)来代替依赖消息。而且,请记住,您可以堆叠异常,它们将按顺序处理(因此,请先放置更具体的捕获。您的代码如下所示:
try
{
}
catch(SqlException sqlEx)
{
if(sqlEx.ErrorCode == 547)
throw;
}
catch(Exception ex)
{
//General error logic
}
如果您想要可能的错误代码的完整列表,请对主数据库运行SELECT*FROM sysmessages
,查看错误代码!是的,这正是我需要的,谢谢。