Как пользователь может отменить длительный запрос?

Связанный: Как программно отменить процесс выполнения SQL Server

Я создал приложение (Windows, WPF), которое в основном является средством просмотра данных в базе данных (Sql Server). Приложение не имеет функции редактирования.

Приложение предоставляет возможность поиска записей на основе ввода пользователя. По большей части строки ищутся по ключевому столбцу и выполняются довольно быстро. Но один столбец в таблице представляет собой большое текстовое поле и я хочу предоставить возможность поиска строк на основе содержимого этого поля. Из-за этого выполнение результирующего SQL-запроса может занять некоторое время. Я хочу предоставить кнопку «Стоп», чтобы пользователь мог прервать поиск, если это необходимо. Ссылка, которую я разместил выше, использует команду Kill для уничтожения spid на сервере Sql, но я не уверен, как это будет работать в моей ситуации, поскольку я использую Entity Framework (4.1)

Например, предположим, что у вас есть запрос, подобный этому:

var docs = from document in context.Documents
           join header in context.Headers
           on document.DocumentID equals header.HeaderID into headerGroup
           from subdoc in headerGroup.DefaultIfEmpty()
           where document.LargeTextColumn.Contains("search term")
           select (...)

foreach (var item in docs)
{
    //Do something with item here
}

Поскольку запрос на самом деле не выполняется, пока я не повторю его с помощью оператора foreach, как я могу предоставить пользователю кнопку «Остановить запрос»? Это похоже на кнопку остановки в Sql Server Management Studio.

Это возможно?


person Chris Dunaway    schedule 13.05.2011    source источник