如何处理UpdateException

本文关键字:UpdateException 处理 何处理 | 更新日期: 2023-09-27 18:02:31

我需要处理异常副本。

var resource = new Resource() { url = tbUrl.Text };
try
{
    context.Resource.AddObject(resource);
    context.SaveChanges();
}   
catch(UpdateException ex)
{
    // how to know exactly which is why the error occurred
}
catch (Exception ex)
{
    throw;
}
更新:

我需要捕获当我试图不添加唯一值时发生的错误。UpdateException -当添加数据出错时触发

如何处理UpdateException

这可能有点晚了,但是对于任何拥有ASP的人来说。. NET数据库更新错误查找细节,InnerException错误处理程序非常有用和详细。

        try { 
            db.SaveChanges();                              
        }
        catch (System.Data.UpdateException ex)    
        {
            Console.WriteLine(ex.InnerException);
        }

        catch (System.Data.Entity.Infrastructure.DbUpdateException ex) //DbContext
        {
            Console.WriteLine(ex.InnerException);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.InnerException);
            throw;
        }

数据库中的T-SQL防止重复城市的插入。

USE [ModelFirstApplication]
GO
/****** Object:  Index [UQ_Address_City]    Script Date: 5/30/2012 7:26:16 AM ******/
ALTER TABLE [dbo].[Addresses] ADD  CONSTRAINT [UQ_Address_City] UNIQUE NONCLUSTERED 
([City] ASC)
GO
因此,如果用户第二次尝试将"Spokane"插入到演示应用程序的Addresses表中,上面的异常处理程序将报告
System.Data.UpdateException: An error occurred while updating the entries. 
See the inner exception for details. ---> 
System.Data.SqlClient.SqlException: Violation of UNIQUE KEY constraint 'UQ_Address_City'. 
Cannot insert duplicate key in object 'dbo.Addresses'. 
The duplicate key value is (Spokane).
The statement has been terminated.

知道使用哪个异常处理程序是非常方便的,你的问题很清楚。

参见AppDomain.CurrentDomain.UnhandledException。此外,对于WPF应用程序,查看application . current . dispatcherunhandledexception

是有意义的。

最佳实践是将异常消息和堆栈跟踪写入日志文件,并通过读取日志文件获取数据。我建议使用log4net http://sadi02.wordpress.com/2008/06/29/log4net-tutorial-in-c-net-how-can-i-show-log-in-a-file/