Considérez ce code (Oui le laid, mais il devrait aussi):SqlConnection-Exceptions est-elle mise en cache? Im obtenir la même exception, même si des modifications ont été apportées entre
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.
// ...
}
Si je supprime le chèque inital qui jette la première exception, il fonctionnera et il ne jettera pas la deuxième exception. Pourquoi ai-je ce comportement? C'est presque comme si la première exception était mémorisée/mise en cache pour cette chaîne de connexion jusqu'à la deuxième fois. Mais la base de données a été créée (Ive vérifié que bien sûr) entre donc il ... ne devrait pas
Mise à jour:
Le problème était connexion de mise en commun ValdV suggéré. Ive a changé le code ci-dessus pour ce qui suit et il fonctionne maintenant:
try
{
using (SqlConnection c = new SqlConnection(cstr))
{
c.Open();
}
}
catch
{
SqlConnection.ClearAllPools(); // clear all pooled connections
}
D'une certaine façon, il ne marchait pas juste compensation la connexion a échoué, je devais effacer tous ...
Paramétrer Pooling = false a résolu le problème! Je l'ai vérifié plusieurs fois. Ok, donc la connexion n'a pas été fermée mais réutilisée même si elle n'a pas réussi à ouvrir ... semble être un comportement indésirable? Je suppose que je veux toujours la mise en commun pour tous les autres cas. Maybee Je peux effacer la piscine si une exception se produit peut-être ... –
Je crois, c'est un bug. Ce rapport de bogue est probablement lié à votre problème: https://connect.microsoft.com/VisualStudio/feedback/details/522506/. Pour contourner ce problème, il est recommandé de vider le pool de connexions en cas d'erreur (notez qu'il existe également une méthode ClearPool qui efface le pool pour une connexion spécifique uniquement). – VladV