Я хотел бы дать пользователю возможность отменить выполняемый запрос. Запрос выполняется очень медленно. (Оптимизация запросов - помимо этого.) Это в основном из моего любопытства.
MSDN говорит:
Если ничего не отменяется, ничего не происходит. Однако, если есть команда в процессе, и попытка отмены не выполняется, исключение не является генерируется.
- Cmd - SqlCommand
- DA - DataAdapter
- Conn - SqlConnection
- CurrentSearch - Тема
- LongQuery - Singleton
Вот что у меня есть:
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;
}
Я заметил, что CurrentSearch.Abort()
блокирует, поэтому я завернул его в поток, что, вероятно, означает, что поток все еще работает.
Наконец, есть ли что-то еще, что я могу сделать, чтобы отменить запрос? Действительно ли можно отменить такой длинный запрос из .NET?