2013-02-19 74 views
0

我正在做一个表单,用户可以插入/删除/添加实体。我正在使用Winforms c#和实体框架4.在捕获中自定义Sql异常消息

好吧,用户可以删除对象。现在,这些对象可以被其他实体引用,所以如果用户想要删除它,他会得到一个异常。

我捕捉到这个异常,以便向他显示一条消息,说明该对象开始在其他对象中使用。

我得到的异常是(UpdateException)。但是,如果还有更新问题,则可能会引发此异常。有什么办法从Sql使用这个异常来获取错误代码?因为我确实有发生这种情况时抛出的错误代码。

如果我使用SqlException,我可以检查它的编号,但这不是我收到的异常。

+0

底层异常可能已保留在更新异常的InnerException属性中。 – 2013-02-20 00:14:37

+0

而不是捕捉异常为什么你甚至在尝试保存更改之前不检测条件?您似乎预料到此异常,因此您不会将异常用作例外,而是控制应用程序的流程。 – Pawel 2013-02-20 01:54:22

+0

因为我将不得不检查每一个关系。我会用这个为每个实体。我为什么要这样做,如果sql管理自己?你告诉我的是和说“为什么使用try catch?”一样。只是检查之前的每一个错误可能性。只是没有选择。感谢您的回答,尽管 – Andres 2013-02-20 02:10:42

回答

-2

你的意思是你看到完整的异常或你想要的用户到看到异常?

如果你想看到的异常,你可以写一个文本文件:

try 
{ 
    // do something 
} 
catch(SQLException sqlex) 
{ 
    using (var file = new StreamWriter(@"C:\Users\Home\Desktop\sqlException.txt")) 
    { 
     file.WriteLine(sqlex.ToString()); 
    } 
} 
catch(Exception e) 
{ 
    using (var file = new StreamWriter(@"C:\Users\Home\Desktop\generalException.txt")) 
    { 
     file.WriteLine(e.ToString()); 
    } 
} 

这将写入例外的文本文件在桌面上(变化目录如适用)。

+0

-1:您的两个'StreamWriter'实例需要位于'using'块中。 – 2013-02-20 01:10:30

+0

你的意思是将两个catch块封装在一个使用块中?我只从一个我只用过一个catch块的示例中得到了这个结果(我的工作) - 我只在这里放入两个catch块来表明他可以为一个文件写入不同的异常。我的答案不能解决问题吗? – MattSull 2013-02-20 01:14:08

+0

编号在'catch'块里面:'使用(var file = new StreamWriter(...)){file.WriteLine(e.ToString());}' – 2013-02-20 01:18:01