Manipuler différents ConnectionStates avant d'ouvrir SqlConnection

Si vous devez ouvrir une SqlConnection avant d'émettre des requêtes, pouvez-vous simplement gérer tous les états de connection non ouverts de la même manière? Par exemple:

if (connection.State != ConnectionState.Open) { connection.Open(); } 

J'ai lu quelque part que pour ConnectionState.Broken la connection doit être fermée avant d'être rouverte. Est-ce que quelqu'un a de l'expérience avec ça? Merci-

http://msdn.microsoft.com/en-us/library/system.data.connectionstate.aspx

L'état de connection rompu doit être fermé et rouvert avant d'être admissible à une utilisation continue.

Edit: Malheureusement, la fermeture d'une connection fermée va également rechigner. Vous devrez tester le ConnectionState avant d'agir sur une connection inconnue. Peut-être qu'une brève déclaration pourrait faire l'affaire.

Cela ne répond pas directement à votre question, mais la meilleure pratique consiste à ouvrir et à fermer une connection pour chaque access à la database. Le regroupement de connections ADO.NET garantit que cela fonctionne bien. Il est particulièrement important de le faire dans les applications server (par exemple ASP.NET), mais je le ferais même dans une application WinForms qui accède directement à la database.

Exemple:

 using(SqlConnection connection = new SqlConnection(...)) { connection.Open(); // ... do your stuff here } // Connection is disposed and closed here, even if an exception is thrown 

De cette façon, vous n'avez jamais besoin de vérifier l'état de la connection lors de l'ouverture d'une connection.

Vous pouvez le gérer de la même manière. Je recevais de nombreux états de connection == brisés en utilisant IE9. Il y a quelque chose de fondamentalement faux avec IE9 à cet égard puisque aucun autre browser n'a eu ce problème d'états de connection cassés après 5 ou 6 mises à jour des tables de la database. Donc j'utilise le context d'object. Donc, fondamentalement, fermez-le et rouvrez-le.

J'ai ce code avant toutes mes lectures et mises à jour dans la couche logique businss:

 if (context.Connection.State == System.Data.ConnectionState.Broken) { context.Connection.Close(); context.Connection.Open(); }