2012-06-11 11 views
5

Uso un processo asincrono per recuperare i dati da una query SQL con esecuzione prolungata. Il processo chiama una stored procedure tramite il metodo SqlCommand.BeginExecuteReader().Terminare con grazia query SQL Server di lunga durata da ADO.NET

A volte, vorrei chiudere il processo e terminare con garbo qualsiasi query in esecuzione.

Dopo alcuni test, sembra che chiamare SqlConnection.Close() sia sufficiente. Per buona misura, ho anche chiamato esplicitamente SqlConnection.Dispose().

Quando si esegue una traccia attraverso SQL Server Profiler, sembra come se la query è conclusa con garbo come la vedo un SQL:BatchStarting seguito da un SQL:BatchCompleted dopo aver chiamato Close().

Qualcuno può confermare se la chiusura della connessione è tutto ciò che è richiesto?

risposta

2

Calling Close è sufficiente, solo alcune osservazioni:

Prima di tutto assicuratevi di scrivere i vostri Chiudi metodi all'interno blocco finally per garantire la gestione delle eccezioni corretta.

Inoltre, non è necessario chiamare entrambi i metodi SqlConnection.Close e SqlConnection.Dispose poiché entrambi fanno lo stesso. Il metodo Dispose viene aggiunto per implementare lo schema IDisposable e questo metodo chiama internamente il metodo SqlConnection.Close, che ha un nome più naturale, perché chiudiamo le connessioni, ma non le smaltiamo :)

Se si utilizza DataReader, è necessario chiuderlo anche ogni volta dopo che si desidera utilizzare la connessione per altri scopi.

Problemi correlati