2011-03-18 95 views
0

代码:异常处理内部错误

public static void Test() 
{ 
    try 
    { 
     OpenConnectionToDatabase(); //Opens a connection to Oracle DB 

    } catch(Exception e) 
    { 
     e.Data.Add("Query:", command.CommandText); 
     throw e; 
    } 
} 

当执行该代码时,数据库服务器在关闭和通信中断,.NET引发以下错误: 项目已添加。键入字典:'Query:'添加的键:'Query:' at System.Collections.ListDictionaryInternal.Add(Object key,Object value)

这是怎么回事?

+0

OpenConnectionToDatabase实际上做了什么? – 2011-03-18 17:50:56

+0

'OpenConnectionToDatabase()'具有完全相同的异常处理? – 2011-03-18 17:51:01

+0

也许在异常中的数据字典已经有该项的条目。 – 2011-03-18 17:55:14

回答

2

编辑:(基于@ LukeH的评论)

e.Data["Query:"] = command.CommandText; 
+2

我不知道这个......如果“查询:”的现有值不同,该怎么办?你将失去宝贵的调试信息。 – 2011-03-18 17:57:18

+1

对Austin的评论+1,但是如果你*想*只想覆盖现有的“Query:”项目,那么你不需要'Contains'检查,因为使用索引器将根据需要添加或覆盖:'e。数据[“查询:”] = command.CommandText;'会做的伎俩。 – LukeH 2011-03-18 18:00:39

+2

这并不能解释问题发生的原因。在OpenConnectionToDatabase引发异常之后,e.Data中不应该有ANYTHING。它只在e.Data填充的catch块中。 – user666423 2011-03-18 18:14:56

0

不要使用 “throw e;”。只需使用throw即可。

+0

绝对好的建议,但不是真正的问题的答案。应该可能是一个评论。 – LukeH 2011-03-18 18:01:52