Отмена запроса базы данных dillema
Возможно, это вопрос, который задавался много раз, но после многих поисков и чтения я все еще не совсем уверен, что является лучшим подходом.
Проблема проста: некоторые транзакции базы данных в моем приложении длинны (секунды, минуты). Это может быть результатом двух вещей: для одного запроса требуется обработка большого количества данных или выполнение нескольких запросов в серии извлеченных данных. Во многих случаях обе игры находятся в игре. Это зависает от пользовательского интерфейса, и, тем не менее, он не может отменить это.
Решение также кажется простым: переместите эти транзакции в другой поток, а затем уничтожьте этот поток, если это необходимо.
- Исправление несоответствий БД - поля идентификатора
- Динамическое обновление в представлении
- Замена префиксов пространства имен xml в SQL Server с помощью XQuery
- Доступ к преобразованию Statement IIF в SQL
- Как перечислить все столбцы в таблице?
Однако многие люди здесь, в интернете, возражают против убийства потоков. Они предлагают использовать DbCommand.Cancel (), который является безопасным потоком. Но, другие люди говорят, что нет гарантии, что эта команда отменит запрос. Представляется еще более сложная проблема: как может поток пользовательского интерфейса узнать, какой DbCommand выполняется, когда пользователь нажимает? Heck, поток мог обрабатывать данные в памяти в этот момент.
Можете ли вы пролить свет на эту тему?
- Отображение количества строк с одинаковым значением в метку
- Присоединить запрос к диапазону дат
- Получить строки таблицы как столбцы во второй таблице
- MSSQL - выбор отдельных продуктов, которые находятся в двух столбцах
- IDENTITY_INSERT SQL-скрипт
- Как проверить наличие БД?
- Почему первое выполнение запроса занимает в два раза больше времени?
- SQL Server 2012: обновить строку с уникальным номером
нет гарантии, что эта команда отменит запрос
Это зависит от поставщика. Некоторые поставщики не поддерживают команды отмены, но SQL Server делает это, поэтому это не должно быть проблемой. Конечно, это также зависит от типа выполняемой команды …
Представляется еще более сложная проблема: как может поток пользовательского интерфейса узнать, какой DbCommand выполняется, когда пользователь нажимает?
DbCommand.Cancel
– это метод экземпляра, а не статический метод … поэтому вам нужно сохранить ссылку на исполняемую команду и вызвать отмену этого экземпляра.