2009-03-25 19 views
6

Estoy usando múltiples consultas para extraer datos del mismo servidor en mi aplicación. El problema es que tengo que abrir una nueva conexión cada vez que tengo una nueva consulta.¿Cómo puedo mantener abierta una conexión cuando realizo varias consultas?

¿Es incluso posible:

  • Abrir la conexión
  • consulta Ejecutar
  • resulta Tire
  • Ejecutar otra consulta
  • Tire otro resultado
  • Ejecutar consulta final
  • Tire otro resultado
  • Conexión cercana.

Respuesta

17

Aunque es posible que aún no lo sepa, lo está haciendo correctamente.

Abra la conexión, haga su consulta, ciérrela. Preferiblemente usando un bloque using o try/finally.

Esto puede sonar como una gran sobrecarga, pero el grupo de conexiones en .NET Framework Data Provider para SQL Server realmente optimizará esto para usted.

De hecho, se recomienda cerrar la conexión. Aquí es una cita de la documentación:

Se recomienda que siempre cerrar la conexión cuando se está terminado de usarlo para que la conexión a ser devuelto a la piscina. Esto se puede hacer utilizando los métodos Cerrar o Eliminar del objeto de conexión . Las conexiones que no están cerradas explícitamente pueden no ser agregadas o devueltas al grupo. Para ejemplo, una conexión que ha ido fuera de alcance, pero eso no ha sido cierre explícitamente sólo será regresaron a la agrupación de conexiones si el tamaño máximo del conjunto se ha alcanzado y la conexión sigue siendo válido.

Aquí es un ejemplo de un código que hace esto:

try { 
    conn.Open(); 
    // Perform query here 
} finally { 
    conn.Close(); 
} 

Como referencia:

http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.71).aspx

2

Si está utilizando ASP.NET con la misma cadena de conexión, usará una conexión agrupada que quizás nunca se cierre físicamente, por lo que casi siempre usará una conexión abierta disponible.

0

Respuesta corta: Sí. Esto debería ser posible con la mayoría de los proveedores de datos.

Respuesta larga: Depende de lo que esté utilizando para su acceso a los datos. Sin embargo, probablemente no necesites preocuparte por eso. Muchos marcos de proveedores de datos tienen integrada la agrupación de conexiones, por lo que la creación/apertura posterior de la conexión no debe "abrir" realmente una conexión.

0

Claro, si estás utilizando un objeto SqlConnection que sólo puede hacer algo como esto:

connection.Open(); 
cmd.ExecuteReader(); // or any other form of getting the data 
cmd2.ExecuteReader(); 
. 
. 
. 
. 
connection.Close(); 

También me gustaría agregar, si está utilizando algunos SqlDataAdapters para sus consultas, aunque normalmente no necesita abrir la conexión usted mismo, si HACE explícitamente llamar a connection.Open() entonces no lo hará Cierre la conexión automáticamente, lo que le permite ejecutar consultas múltiples con una sola conexión.

1

Es muy posible. Asumiendo que estás hablando de Connection y un DataReader. Si tiene que crear una conexión diferente cada vez, parece que algo va mal.

Sin ver ningún código, supongo que está dejando abierto el DataReader. Este es un GRAN error. De manera predeterminada, los DataReaders consumen completamente la conexión y dejarla sin cerrar puede provocar fugas. Cierre el DataReader, luego ejecute otro. Recomiendo encapsular el DataReader en un bloque de uso.

Rob

+0

utilice el valor de enumeración ConnectionBehavior.CloseConnection en la sobrecarga ExecuteReader (SQLCommand, ConnectionBehavior) para forzar al lector a volver a liberar la conexión en el grupo cuando el lector se cierra –

0

Si está utilizando C# para abrir una conexión. use using statement le ayudará a limpiar el recurso/conexión, incluso si hay alguna excepción arrojando.

using (SqlConnection connection = 
       new SqlConnection(connectionString) 
      { 
       connection.Open(); 
       //issue command 
      } 

Y leer esto:

http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.71).aspx, puede "Controlar Agrupación de conexiones con la cadena de conexión Palabras clave", y el sistema se encargará de la puesta en común para usted.

Cuestiones relacionadas