Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定它是否是引用完整性冲突异常_C#_.net_Sql Server_Entity Framework_Ado.net - Fatal编程技术网

C# 如何确定它是否是引用完整性冲突异常

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

如果异常是由于引用完整性冲突引起的,那么我想通过下面的方法检查catch{}子句;是否有更好的/优雅的/更合适的方法来确定其是否为引用完整性异常

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
,查看错误代码!是的,这正是我需要的,谢谢。