2012-06-11 18 views
5

Utilizo un proceso asíncrono para recuperar datos de una consulta SQL de larga ejecución. El proceso llama a un procedimiento almacenado a través del método SqlCommand.BeginExecuteReader().Concluir correctamente la consulta SQL Server de larga ejecución desde ADO.NET

A veces, me gustaría cerrar mi proceso y terminar con gracia cualquier consulta en ejecución.

Después de algunas pruebas, parece que llamar a SqlConnection.Close() es suficiente. Para una buena medida, también llamo explícitamente al SqlConnection.Dispose().

Cuando se ejecuta una traza a través de SQL Server , parece como si la consulta se terminó gracia como veo un SQL:BatchStarting seguido de un SQL:BatchCompleted después de llamar Close().

¿Alguien puede confirmar si el cierre de la conexión es todo lo que se necesita?

Respuesta

2

Cerca de llamada es suficiente, sólo una pocas observaciones:

En primer lugar asegúrese de escribir sus Cerrar métodos dentro finally para garantizar la correcta gestión de excepciones.

Además, no es necesario que invoque los métodos SqlConnection.Close y SqlConnection.Dispose ya que ambos hacen lo mismo. El método de eliminación se agrega para implementar el patrón IDisposable y este método llama internamente al método SqlConnection.Close, que tiene un nombre más natural, porque cerramos las conexiones, pero no las elimina :)

Si está utilizando DataReader, debe cerrarlo también cada vez que desee utilizar la conexión para otro fin.

Cuestiones relacionadas