Jos*_*ble 5 c# exception sqlexception
在以下代码中,连接字符串密码有意不正确,导致在打开连接时出现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);
}
Run Code Online (Sandbox Code Playgroud)
出于日志记录的目的,我想将值添加到Exception的Data字典中.在第一个异常之后,我发现大多数后续异常都是SqlException类的完全相同的实例(用GetHashCode()验证)并且已经有我的数据字典条目.这会导致由于密钥已存在而抛出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'
Run Code Online (Sandbox Code Playgroud)
我意识到我可以更改它以使用Data属性上的键控setter,这将添加或替换该条目,但我担心重用可能导致记录无效的数据条目.此外,从新代码执行抛出的异常与抛出的先前异常相同的实例似乎很奇怪.
任何见解?你能复制一下吗?
PS如果你不认为在Exception的数据字典中添加条目是合适的,我会很高兴听到你的想法,但它并没有改变关于为什么重用SqlException实例的问题的核心.