Рассмотрим этот код (да, он уродлив, но он также должен работать):
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
}
Каким-то образом это не сработало, просто очистив неудачное соединение, мне пришлось очистить все ...