Кэшируются ли исключения SqlConnection? Я получаю то же исключение, хотя изменения были сделаны между - PullRequest
0 голосов
/ 16 октября 2010

Рассмотрим этот код (да, он уродлив, но он также должен работать):

try
{
    // Test the connection to a database that does not exist yet...
    using (SqlConnection c = new SqlConnection("Data Source=localhost;Initial Catalog=test;Integrated Security=True"))
    {
        c.Open();
    } // Dispose calls Close()
}
catch
{
    //... will fail with an exception
}

// Creating the database...
using (SqlConnection c = new SqlConnection("Data Source=localhost;Integrated Security=True"))
{
    c.Open();
    SqlCommand cmd = new SqlCommand("CREATE DATABASE test", c);
    cmd.ExecuteNonQuery();
}

using (SqlConnection c = new SqlConnection("Data Source=localhost;Initial Catalog=test;Integrated Security=True"))
{
    c.Open(); // Failes with the same exception even though the database have been created in between.
    // ...
}

Если я уберу начальную проверку, которая выдает первое исключение, оно сработает и не сгенерирует второе исключение.Почему я получаю такое поведение?Это почти так, как будто первое исключение запоминается / кэшируется для этой строки соединения до второго раза.Но база данных была создана (я проверял это, конечно) между ними, поэтому она не должна ...

Обновление:

Проблема заключалась в создании пула соединений, как предложил ValdV,Я изменил приведенный выше код на следующий, и теперь он работает:

try
{
    using (SqlConnection c = new SqlConnection(cstr))
    {
        c.Open();
    }
}
catch
{
    SqlConnection.ClearAllPools(); // clear all pooled connections
}

Каким-то образом это не сработало, просто очистив неудачное соединение, мне пришлось очистить все ...

1 Ответ

0 голосов
/ 16 октября 2010

Ну, наверное, единственный кеш, который может иметь какое-то влияние, это пул соединений SQL (соединение на самом деле не закрыто, оно возвращается в пул и используется повторно позже).
Вы можете добавить «Pooling = false» встрока подключения, чтобы отключить его и посмотреть, что-нибудь изменится.

Хотя я бы предположил, что проблема с пулом маловероятна, и есть больше шансов, что вы где-то ошиблись.Каково точное сообщение для обоих исключений?Вы уверены, что база данных действительно была создана?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...