visual studio query net example ejemplo data c# .net sql-server database

c# - studio - system.data.sqlclient dll



Manejar diferentes ConnectionStates antes de abrir SqlConnection (3)

Esto no responde directamente su pregunta, pero la mejor práctica es abrir y cerrar una conexión para cada acceso a la base de datos. La agrupación de conexiones ADO.NET asegura que esto funcione bien. Es particularmente importante hacerlo en aplicaciones de servidor (por ejemplo, ASP.NET), pero lo haría incluso en una aplicación de WinForms que accede directamente a la base de datos.

Ejemplo:

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

De esta forma, nunca necesitará verificar el estado de la conexión al abrir una conexión.

Si necesita abrir un SqlConnection antes de emitir consultas, ¿puede simplemente manejar todos los ConnectionStates no abiertos de la misma manera? Por ejemplo:

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

Leí en alguna parte que para ConnectionState.Broken la conexión debe cerrarse antes de que se vuelva a abrir. ¿Alguien tiene experiencia con esto? Gracias-


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

El estado de conexión roto necesita ser cerrado y reabierto antes de ser elegible para el uso continuado.

Editar: Desafortunadamente, cerrar una conexión cerrada también será un obstáculo. Deberá probar el ConnectionState antes de actuar sobre una conexión desconocida. Tal vez una breve declaración de cambio podría hacer el truco.


Puedes manejarlo de la misma manera. Estaba obteniendo numerosos estados de conexión == roto mientras usaba IE9. Hay algo fundamentalmente erróneo con IE9 en este aspecto, ya que ningún otro navegador tenía este problema de estados de conexión rotos después de 5 o 6 actualizaciones en las tablas de la base de datos. Entonces uso el contexto del objeto. Básicamente, simplemente ciérrelo y vuelva a abrirlo.

Tengo este código antes de todas mis lecturas y actualizaciones en la capa lógica de businss:

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