1

我在 C# 中遇到了如何处理try-中的错误的问题catch

示例我将删除记录的代码写入数据库,但该记录已 FK 到另一个表中。如何处理?

try
{
     // delete record in database
}
catch (Exception ex)
{
    int error = // how to get this code exception      
}
4

6 回答 6

2

您可能会捕获SQLException而不是 generalException并使用它的Number属性

 catch (SqlException ex)
    {
     Console.WriteLine(ex.Number);
    }
于 2012-09-04T10:15:28.833 回答
0

Exception保存错误类型的详细信息如果要捕获特定类型的异常,请在 catch 中使用该类型。例如:

 catch (SqlException sqlex)
 {

 }
于 2012-09-04T10:15:24.273 回答
0

您可以Marshal.GetLastWin32Error()用于 Win32。对于数据库使用 SqlException 类。

于 2012-09-04T10:16:25.920 回答
0
try
{  
  //exec delete command
}
catch (SQLException e)
{
  //if SQL error indicates referential integrity violation
    throw ReferentialIntegrityViolationException// or whatever
}
于 2012-09-04T10:19:47.047 回答
0
try
{
    # SQL Stuff
}
catch (SqlException ex)
{
    if (ex.Errors.Count > 0) // Assume the interesting stuff is in the first error
    {
        switch (ex.Errors[0].Number)
        {
            case 547: // Foreign Key violation
                throw new InvalidOperationException("Some helpful description", ex);
                break;
            case 2601: // Primary key violation
                throw new DuplicateRecordException("Some other helpful description", ex);
                break;
            default:
                throw new DataAccessException(ex);
        }
    }

}

根据外键违规

看看: how-to-handle-db-exception-in-c-sharp

这将告诉您如何精确定位外键错误。

另请查看包括外键的 MSDN 行删除

这解释了将级联设置为 on - 这是我相信你所缺少的。

于 2012-09-04T10:20:23.623 回答
0
try
{
    // your code to run
}
catch(SqlException ex)
{
    Console.WriteLine(ex.Message);
} 
// Catch all Exceptions
catch(Exception)
{
    Console.WriteLine(Message);
}
于 2012-09-04T10:37:22.613 回答