我在 C# 中遇到了如何处理try
-中的错误的问题catch
。
示例我将删除记录的代码写入数据库,但该记录已 FK 到另一个表中。如何处理?
try
{
// delete record in database
}
catch (Exception ex)
{
int error = // how to get this code exception
}
我在 C# 中遇到了如何处理try
-中的错误的问题catch
。
示例我将删除记录的代码写入数据库,但该记录已 FK 到另一个表中。如何处理?
try
{
// delete record in database
}
catch (Exception ex)
{
int error = // how to get this code exception
}
您可能会捕获SQLException而不是 generalException
并使用它的Number属性
catch (SqlException ex)
{
Console.WriteLine(ex.Number);
}
将Exception
保存错误类型的详细信息如果要捕获特定类型的异常,请在 catch 中使用该类型。例如:
catch (SqlException sqlex)
{
}
您可以Marshal.GetLastWin32Error()
用于 Win32。对于数据库使用 SqlException 类。
try
{
//exec delete command
}
catch (SQLException e)
{
//if SQL error indicates referential integrity violation
throw ReferentialIntegrityViolationException// or whatever
}
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 - 这是我相信你所缺少的。
try
{
// your code to run
}
catch(SqlException ex)
{
Console.WriteLine(ex.Message);
}
// Catch all Exceptions
catch(Exception)
{
Console.WriteLine(Message);
}