2010-01-07 18 views
5

Cada vez mi aplicación se ejecuta un procedimiento almacenado que hace algo como esto:Comprobar si hay una conexión abierta con la base de datos asp.net/c#

using (DbBase conn = new DbBase()) 
{  
    //call sproc 
} 

la DBBase() abre la conexión con un LINQ DataContext.

Lo que quería saber, si es , hay una manera de saber si una conexión ya se ha abierto, y usar eso en lugar de abrir una nueva. Que la verificación debe hacerse dentro del constructor DbBase() que dice así:

ClientDB = new ClientDBDataContext([ConnectionString from web.config]); 

Gracias

Respuesta

5

Miras a la propiedad de cualquier objeto StateDBConnection, y le dirá si es open, closed, connecting, executing, fetching or broken.

Sin embargo, al utilizar la instrucción using{ }, se le garantiza que la conexión se cerrará cuando el objeto se salga del alcance.

+0

Esta es la mejor respuesta ... –

+1

Preferiría que en esa respuesta se mencionara que el uso() no cierra la conexión, sino que simplemente la libera de nuevo intio ADO.Net Grupo de conexiones para ser reutilizado ... –

+0

@Charles - the Close El método se llama específicamente durante Dispose() de objetos DbConnection. ADO.Net mantendrá la información de agrupamiento, pero en lo que respecta al cliente, la conexión se cerrará, lo cual es bueno. – womp

1

yo no me preocuparía por eso (a menos que perfila o algo). Con la agrupación de conexiones, abrir una nueva conexión puede ser muy barato. Si hay un problema, entonces es posible que desee mirar a cambiar el número de conexiones en la piscina (http://www.15seconds.com/issue/040830.htm)

+0

Gracias por su rápida respuesta. Estoy de acuerdo con el uso compartido de conexiones, pero me gustaría saber si hay alguna manera de hacerlo. –

+0

En ese caso, la respuesta de womp es la más correcta. –

2

Lo bueno de usar using es que este es el tipo de cosas que no necesita preocuparse.

+0

I DV'd esto porque creo que es insuficiente para abordar la falta de conocimiento de OP en el tema. Simplemente diciendo "No te preocupes, feliz", "resolverá todo ..." no responde a la pregunta ni completa los vacíos en la comprensión de los OP sobre la agrupación de conexiones ADO.Net, que es el meollo de este problema. –

+1

@cb: la respuesta de Womp es la mejor y la he subido para indicar eso. Si lo hubiera visto, no habría publicado mi respuesta rápida y sucia. – Nick

+0

He cambiado la respuesta correcta, no se preocupe. De hecho, sé de pool y tu respuesta fue suficiente, hasta donde sé, pero tengo que aceptar que la de womp es más completa. gracias. –

1

No sé sobre DBase, pero el proveedor del servidor Sql al menos ya lo hace por usted. Utiliza la agrupación de conexiones en segundo plano para reutilizar las conexiones existentes siempre que sea posible.

+0

DbBase es una clase que creé administrar los datoscontexto que tenemos en el proyecto. gracias –

1

Con la agrupación de conexiones en su lugar (El valor predeterminado - unlkess ha hecho explícitamente algo para apagarlo) esto no es un problema. Deje que el código de agrupación de conexión maneje esto. Al cerrar la conexión, en realidad, solo se la devuelve al grupo para su reutilización. Solo si no hay ninguno en el grupo se creará (y se abrirá) uno nuevo para usted. Bien, estás usando la declaración using. Esto garantiza que la conexión se liberará nuevamente al grupo para su reutilización (NO se cerrará) tan pronto como se realice este fragmento de código.

Cuestiones relacionadas