c# – 如何处理特定数据库错误的异常

我正在尝试创建一个这样的事务:using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required,options)){try{dbContext.MyTable.PartnerId = someGuid;dbContext.SaveChanges();scope.C...

我正在尝试创建一个这样的事务:

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required,
      options))
{
    try
    {
        dbContext.MyTable.PartnerId = someGuid;
        dbContext.SaveChanges();
        scope.Complete();
        dbContext.AcceptAllChanges()
    }
    catch (Exception ex)
    {
        log.LogMessageToFile("Exception - ExceptionType: " + 
        ex.GetType().ToString() + "Exception Messsage: " + ex.Message);              
    }
}

我知道如果我尝试在特定列中使用重复的sql中插入一个项目,我从sql中得到以下错误:

Cannot insert duplicate key row in object ‘dbo.MyTable’ with unique index ‘idx_PartnerId_notnull’. The duplicate key value is (7b072640-ca81-4513-a425-02bb3394dfad).

我怎么能以编程方式专门捕获这个异常,所以我可以采取行动.

这是我对我的专栏的限制:

CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(yourcolumn)
WHERE yourcolumn IS NOT NULL;

解决方法:

试试这个:

try {
}
catch (SqlException sqlEx) {
}
catch (Exception ex) {
}

在此异常中捕获服务器端发生的SQL错误和警告.
在这里阅读:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception(v=vs.110).aspx

上面的答案将允许您捕获SqlException,但如果您只想通知用户特定错误,则需要进一步优化’SqlException’catch块中的处理. SqlException类具有“ErrorCode”属性,您可以从中导出服务器生成的实际错误.尝试做类似下面的事情:

try 
{
}
catch (SqlException sqlEx) 
{
   if(sqlEx.ErrorCode == 2601)
   {
      handleDuplicateKeyException();
   }
}

2601是SQL Server为您生成的特定错误的实际错误代码.有关完整列表,请运行SQL:

SELECT * FROM sys.messages

本文标题为:c# – 如何处理特定数据库错误的异常

基础教程推荐