Почему SqlException повторно используется при сбое подключения - PullRequest
5 голосов
/ 03 ноября 2011

В следующем коде пароль строки подключения преднамеренно неверен, чтобы вызвать 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 используется повторно.

1 Ответ

0 голосов
/ 10 июля 2012

Как говорили другие, вероятно, все дело в производительности.

Чтобы решить вашу проблему, я предлагаю вам очистить словарь, когда вы закончите регистрировать его содержимое или когда перестанете его перебрасывать.

...