2015-03-16 9 views
15

La classe SqlCommand ha un metodo Cancel che, in base alla documentazione, consente di annullare un comando.Metodo ServerConnection.Cancel

Sto cercando un metodo equivalente per i comandi eseguiti tramite lo smo Server class. La classe ServerConnection (campo connectioncontext della classe server) has a Cancel method ma la documentazione non è chiara su ciò che fa.

+4

Si consiglia di evitare SMO. Ha una serie di problemi tra cui non essere nemmeno remotamente sicuro. Ho finito per buttarlo via e ho fatto tutto con le viste di 'sys'. –

+0

Forse vuoi disconnettere il servocomando? https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.common.connectionmanager.disconnect – Chuck

+1

SQL Profiler non sembra chiaro su cosa faccia. Qualunque cosa faccia, non appare in SQL Profiler come un evento di disconnessione, o qualsiasi altra cosa che possa discernere. Posso annullare la connessione e quindi continuare quello che stavo facendo senza generare errori. Sono con Jonathan Allen. Fallo senza SMO. – quest4truth

risposta

1

Il Metodo SeverConnection.Cancel() funziona in modo simile al metodo SqlCommand.Cancel() ei Documentation stati:

Se non c'è nulla da annullare, non accade nulla. Tuttavia, se è in corso un comando e il tentativo di annullamento non riesce, non viene generata alcuna eccezione .

In alcuni, rari, casi, se si chiama ExecuteReader quindi invito a chiudere (implicitily o esplicitamente) prima di chiamare Annulla e quindi chiamare Annulla, il comando cancel non verrà inviato a SQL Server e il set risultato può continua a trasmettere dopo aver chiamato Chiudi. Per evitare ciò, assicurarsi di chiamare Annulla prima di chiudere il lettore o la connessione .

Il che significa che il metodo di cancellazione funziona, Se si chiama prima della chiamata al metodo close().

Se si chiama dopo, il comando non sarà inviato a SQL con conseguente continua stream per lo sql dopo per chiamare il metodo close().

Inoltre, se v'è un comando in corso e il tentativo di cancellare fallisce, non si riceveranno un errore come nessuna eccezione viene generata in questo caso.

Problemi correlati