<分区>
在以下代码中,连接字符串密码故意不正确,以在打开连接时导致 SqlException。
while (true)
{
try
{
SqlConnection conn = new SqlConnection("Server=localhost;Database=northwind;UID=sa;PWD=b;");
conn.Open();
}
catch (Exception ex)
{
try
{
Console.Write(ex.GetHashCode() + " : ");
ex.Data.Add("MyKey", "LogData");
Console.WriteLine(ex.Message);
}
catch (Exception ex2)
{
Console.WriteLine(ex2.Message);
}
}
Thread.Sleep(500);
}
出于记录目的,我想将值添加到异常的数据字典中。在第一个异常之后,我发现大多数后续异常都是 SqlException 类的完全相同的实例(使用 GetHashCode() 验证)并且已经有了我的数据字典条目。由于 key 已经存在,这会导致抛出 ArgumentException。
34826618 : Login failed for user 'sa'.
34826618 : Item has already been added. Key in dictionary: 'MyKey' Key being added: 'MyKey'
34826618 : Item has already been added. Key in dictionary: 'MyKey' Key being added: 'MyKey'
34826618 : Item has already been added. Key in dictionary: 'MyKey' Key being added: 'MyKey'
我意识到我可以将其更改为使用数据属性上的键控 setter ,这将添加或替换条目,但我担心的是重复使用可能会导致记录无效的数据条目。此外,从新代码执行中抛出的异常与先前抛出的异常是同一个实例,这似乎很奇怪。
有什么见解吗?你能重现这个吗?
附言如果您认为向 Exception 的数据字典中添加条目不合适,我很高兴听到您的想法,但这不会改变关于为什么重用 SqlException 实例的问题的核心。