Vorrei dare a un utente la possibilità di annullare una query in esecuzione. La query è molto lenta. (L'ottimizzazione delle query è oltre il punto.) Questo è principalmente per mia curiosità.Le query del server SQL possono essere realmente annullate/eliminate?
MSDN dice:
Se non c'è nulla da annullare, non accade nulla. Tuttavia, se è in esecuzione un comando e il tentativo di annullamento non riesce, non viene generata alcuna eccezione .
- Cmd - SQLCommand
- DA - DataAdapter
- Conn - SqlConnection
- CurrentSearch - Discussione
- LongQuery - Singleton
Ecco quello che ho:
var t = new Thread(AbortThread);
t.Start();
void AbortThread()
{
LongQuery.Current.Cmd.Cancel();
LongQuery.Current.Cmd.Dispose();
LongQuery.Current.DA.Dispose();
LongQuery.Current.Conn.Close();
LongQuery.Current.Conn.Dispose();
LongQuery.Current.Cmd = null;
LongQuery.Current.DA = null;
LongQuery.Current.Conn = null;
CurrentSearch.Abort();
CurrentSearch.Join();
CurrentSearch = null;
}
Ho notato che CurrentSearch.Abort()
stava bloccando, è per questo che l'ho avvolto in un thread, il che probabilmente significa che il thread sta ancora funzionando.
Infine, c'è qualcos'altro che posso fare per cancellare una query? È effettivamente possibile cancellare una query così lunga da .NET?
è la scrittura dei dati della query, o semplicemente leggerlo? –
@BrianKnight Basta leggere da più viste. – Candide