powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Отмена выполнения запроса
25 сообщений из 33, страница 1 из 2
Отмена выполнения запроса
    #36452254
virus_system
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большая табличка на сервере (точнее не большая таблица, а долгий запрос), подгружаю ее на клиент.

dAdapt.Fill(table); // эта строка отрабатывает минут 5

Загрузка идет в фоновом режиме. (backgroundworker)
Хотелось бы реализовать отмену этого действия (прекратить загруку). Как это сделать?
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452342
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virus_system
Хотелось бы реализовать отмену этого действия (прекратить загруку). Как это сделать?

По идее - никак. Сервер, приняв запрос, уходит сам в себя и до того пока он не розродится - ни на какие внешние раздражители он не реагирует. Некоторые консоли под видом "остановки/прекращения" выполнения - тупо делают disconnect.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452362
virus_system
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
virus_system
Хотелось бы реализовать отмену этого действия (прекратить загруку). Как это сделать?

По идее - никак. Сервер, приняв запрос, уходит сам в себя и до того пока он не розродится - ни на какие внешние раздражители он не реагирует. Некоторые консоли под видом "остановки/прекращения" выполнения - тупо делают disconnect.
_________________
"Helo, word!" - 17 errors 56 warnings


Ну например у того же MSSQL Management Studio есть же кнопка остановить выполнение запроса. И он его останавливает...
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452416
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virus_system
например у того же MSSQL Management Studio есть же кнопка остановить выполнение запроса. И он его останавливает...

1. Ex_Soft
Некоторые консоли под видом "остановки/прекращения" выполнения - тупо делают disconnect.
[/quote]
После остановки что с процессами на серванте? spid тот же, что и был до остановки?
Для того, чтобы расставить все точки над i ставим http://www.wireshark.org/download.html]wireshark и смотрим, что Ваша MSSQL Management Studio делает для остановки...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452437
virus_system
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
После остановки что с процессами на серванте? spid тот же, что и был до остановки?


После остановки в Management Studio? ID такой же
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452448
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virus_system
После остановки в Management Studio? ID такой же

Ну... Тогда
Ex_Soft
ставим wireshark и смотрим, что Ваша MSSQL Management Studio делает для остановки...

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452452
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логика такая:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET XACT_ABORT ON
BEGIN TRAN
    WHILE ...
    BEGIN
        -- Работаем
        -- Если нужно отмениться, дёргаем RAISERROR 
        -- Cмотрим некий признак отмены, напр. значение в таблице, наличие файла, ...
        RAISERROR; --Make sure to have this break at the end to prevent infinite loop 
    END
COMMIT

P.S. Если сам атомарный запрос нужно отменить - то нужно рвать/восстанавливать коннект. Либо курить асинхронные соединения.
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452459
virus_system
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, атомарный? это я как понимаю один запрос в данной транзации.
У меня он один...
типа select * from table1.
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452468
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virus_systemМСУ, атомарный? это я как понимаю один запрос в данной транзации.
У меня он один...
типа select * from table1.
Да, всё верно.
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452474
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще: SqlCommand.Cancel
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452480
virus_system
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЛогика такая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET XACT_ABORT ON
BEGIN TRAN
    WHILE ...
    BEGIN
        -- Работаем
        -- Если нужно отмениться, дёргаем RAISERROR 
        -- Cмотрим некий признак отмены, напр. значение в таблице, наличие файла, ...
        RAISERROR; --Make sure to have this break at the end to prevent infinite loop 
    END
COMMIT


Прошу прощения, но не понял этого? Чем мне это поможет
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36452507
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virus_systemПрошу прощения, но не понял этого? Чем мне это поможет
В Вашем случае - ничем, забудьте.
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #36454644
virus_system
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, sqlcommand.Cancel в принципе вариант, но при вызове метода Fill, а после метода Cancel. Возникает исключение.

{"При выполнении текущей команды возникла серьезная ошибка..
При наличии результатов они должны быть аннулированы.
Операция отменена пользователем."}

Это нормально?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Отмена выполнения запроса
    #37587737
SPB2011-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУЛогика такая:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SET XACT_ABORT ON
BEGIN TRAN
    WHILE ...
    BEGIN
        -- Работаем
        -- Если нужно отмениться, дёргаем RAISERROR 
        -- Cмотрим некий признак отмены, напр. значение в таблице, наличие файла, ...
        RAISERROR; --Make sure to have this break at the end to prevent infinite loop 
    END
COMMIT



P.S. Если сам атомарный запрос нужно отменить - то нужно рвать/восстанавливать коннект. Либо курить асинхронные соединения.

МСУ, прошу мне так же помочь и немного пояснить

У меня один запрос на селект (20 мин) но fill виснет (при отмене), fill идет в отдельном потоке и поток этот не убить; коннект, комманд отменял, но fill как работает так и работает (oracle databasecontrol показывает)

Выше ты привел sql запрос так?
в тело бегин я ставлю sql команду
в while я ставлю признак отмены? но как признак отмены я передам в уже исполняемый fill

Очень прошу помочь мне, третий день не решить эту проблему. Поясни пожалуйста.
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37587745
SPB2011-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588025
SPB2011-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел еще на форуме надо идти к ocibreak

Никто не подскажет как из проекта winfoms.net4 подступится к oci
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588032
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторdAdapt.Fill(table); // эта строка отрабатывает минут 5

Сколько у вас записей в таблице... ? Вы точно уверены что пользователь желает увидеть их все?

Кстати, что мешает использовать, например, DataReader вместо DataAdapter? В цикле чтения спокойно сможете прервать...
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588039
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Исполните свой запрос через MS SMS с просмотром плана запроса, и посмотрите, можно ли увеличить скорость выполнения запроса... Sql Managment studio кстати иногда неплохо советует по созданию индексов...
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588071
SPB2011-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,
Спасибо за ответ.

У меня дело обстоит так,
я написал сложный sql (много вложенных select, то есть у меня не как в обычном select используется таблица, а вместо таблицы стоит свой селект), запрос большой -192 столбца на 40 тыс строк выборки данных из разных таблиц 2млн.-10 млн. строк.

Каждый из 192 столбцов рассчитывается (то есть два селекта: одно минус другое и получается один из 192 столбцов), то есть фактически в этом запрос оракл исполняет 192*2 select а потом привязывает все 192 столбца к одному соответствию. (правому боковику).

То есть написал запрос по выборки всей финансовой информации по 40 тыс.дебитор в одном скл запросе.(финансовая информация хранится в разных оракловских таблицах).

(конечно можно написать процедуру, чтобы данный расчет произошел ночью писался в таблицу и потом я бы работал с data.reader как чтение, но пока прав на создание таблиц в хранилище у меня нет)

Таким образом этот select работает в оракле 20 мин (смотрел в pl/sql --18 Мин сам запрос и порядка еще 2 мин на загрузку данных 192*40 тыс. строк).

Так вот мне ни как не выйти из fill если он запущен, то есть смотрю datacontrol все равно процесс sql идет.
Процесс в оракл останавливается если я жму стоп в студии))), А програмно ни abort поток, ни application.exit не убивает запущенный процесс в оракле.

Может никто не подскажет как мне тут быть.

ПС
Про value запроса я вообще молчу, фантастическая))))
Тут читаю что надо как oci, но пока не очень представлю как подступится из winforms.


Вот и проблема что если методом fill я запускаю этот запрос, то потом я пока ничто не нашел чтобы убить
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588082
SPB2011-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И продолжу, что отработанный select из dataset я скидываю в excel, оформляю и у меня готовый отчет.
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588335
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин. Я же написал. Заполняйте не DataAdapter'ом, а DataReader'ом...
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588578
SPB2011-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, сейчас попробую, отпишусь.
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588672
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SPB2011-2010Спасибо, сейчас попробую, отпишусь.

Ну я бы сделал примерно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
	public class AsyncReader : System.ComponentModel.INotifyPropertyChanged
	{
		private IEnumerable<dynamic> _readResult;
		public IEnumerable<dynamic> ReadResult
		{
			get
			{
				return _readResult;
			}
		}

		private IAsyncResult _asyncResult;

		private bool _cancelled;

		private object _sync;

		private SqlCommand _command;

		public AsyncReader()
		{
			this._cancelled = false;
			this._sync = new object();
		}

		private void EndExecCommand(IAsyncResult result)
		{
			if (result.IsCompleted)
			{
				List<object> resList = new List<object>();
				int cancelCheckCount = 0;
				var reader = _command.EndExecuteReader(result);
				while (reader.Read())
				{
					cancelCheckCount ++;
					if (cancelCheckCount / 100 == 0)
					{
						lock (_sync)
						{
							if (_cancelled)
							{
								return;
							}
						}
					}
					resList.Add(new
					{
						Field1 = reader["field1"],
						/*
						 * Чтение полей
						 */
					});
				}
				this._readResult = resList;
				if (PropertyChanged != null)
				{
					PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("ReadResult"));
				}
			}
		}

		public void BeginRead(SqlCommand command)
		{
			_command = command;
			_asyncResult = _command.BeginExecuteReader(new AsyncCallback(EndExecCommand), null);
		}

		public void CancelRead()
		{
			lock (_sync)
			{
				_cancelled = true;
				_command.Cancel();
			}
		}

		public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
	}

...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588683
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		public void CancelRead()
		{
			lock (_sync)
			{
				_cancelled = true;				
				if (_asyncResult != null && !_asyncResult.IsCompleted)
				{
					_command.Cancel();
				}
			}
		}
...
Рейтинг: 0 / 0
Отмена выполнения запроса
    #37588751
SPB2011-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,

Сейчас буду разбиратся с тем кодом что ты написал. спасибо большое!!!!!! за помощь.
(реально уже убываю на это четвертый день, а на форуме четко не написано как в этом случае быть
(но проблема бывает у многих).

Вот к твоему посту попробывал сделать задачу datareaderom (в классическом варианте по книге Сеппа).
Не получилось, ведь проблема не втом чтобы превать dataread когда он читает данные из оракл, когда тот уже сгенерировал запрос,
а в том чтобы отменить сам запрос когда он рассчитывается в оракл (у меня по времени 20 мин), а у меня получается что он все считается в оркал даже при выходе из формы (в том числе и поток.abort---treadstate.abortrequested--ждет окончание процесса в оракл).
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Отмена выполнения запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]