Me gustaría dar al usuario la capacidad de cancelar una consulta en ejecución. La consulta es realmente lenta. (La optimización de la consulta es además del punto). Esto se debe principalmente a mi curiosidad.¿Pueden las consultas del servidor sql realmente cancelarse/anularse?
MSDN dice:
Si no hay nada que cancelar, no ocurre nada. Sin embargo, si hay un comando en proceso y el intento de cancelar falla, no se genera ninguna excepción .
- Cmd - SQLCommand
- DA - DataAdapter
- Conn - SqlConnection
- CurrentSearch - Tema
- LongQuery - Singleton
es lo que tengo aquí:
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;
}
Me di cuenta de que CurrentSearch.Abort()
estaba bloqueando, es por eso que lo envolví en un hilo, lo que probablemente significa que el hilo todavía está funcionando.
Finalmente, ¿hay algo más que esto que pueda hacer para cancelar una consulta? ¿Es realmente posible cancelar una consulta tan larga desde .NET?
son los datos de escritura consulta, o simplemente leerlo? –
@BrianKnight Solo leyendo desde múltiples vistas. – Candide