4

我需要处理异常重复。

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 - 添加数据出错时触发。

4

3 回答 3

6

这可能有点晚了,但是对于查找详细信息的 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”,则上述异常处理程序会报告

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.

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

于 2012-05-30T05:02:29.300 回答
0

请参阅AppDomain.CurrentDomain.UnhandledException此外,对于 WPF 应用程序,查看Application.Current.DispatcherUnhandledException是有意义的

于 2011-07-12T14:25:55.867 回答
-1

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

于 2011-07-12T14:24:49.727 回答