В следующем коде пароль строки подключения преднамеренно неверен, чтобы вызвать 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 ()) и уже имеют мои записи в словаре данных.Это вызывает исключение 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'
Я понимаю, что могу изменить его на использование установщика с ключом в свойстве Data, которое добавит или заменит запись, но мойпроблема заключается в том, что повторное использование может привести к записи в журнал недействительных записей.Кроме того, кажется странным, что исключение, генерируемое при выполнении нового кода, будет тем же экземпляром, что и выброшенное предыдущее исключение.
Любое понимание?Можете ли вы воспроизвести это?
PS Если вы не считаете целесообразным добавление записей в словарь данных исключения, я был бы рад услышать ваши мысли, но это не меняет сути вопроса опочему экземпляр SqlException используется повторно.