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

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

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

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

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


Ну например у того же MSSQL Management Studio есть же кнопка остановить выполнение запроса. И он его останавливает...
...
Рейтинг: 0 / 0
05.02.2010, 16:11
    #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
05.02.2010, 16:20
    #36452437
virus_system
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
Ex_Soft
После остановки что с процессами на серванте? spid тот же, что и был до остановки?


После остановки в Management Studio? ID такой же
...
Рейтинг: 0 / 0
05.02.2010, 16:22
    #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
05.02.2010, 16:23
    #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
05.02.2010, 16:26
    #36452459
virus_system
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
МСУ, атомарный? это я как понимаю один запрос в данной транзации.
У меня он один...
типа select * from table1.
...
Рейтинг: 0 / 0
05.02.2010, 16:29
    #36452468
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
virus_systemМСУ, атомарный? это я как понимаю один запрос в данной транзации.
У меня он один...
типа select * from table1.
Да, всё верно.
...
Рейтинг: 0 / 0
05.02.2010, 16:32
    #36452474
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
Вот еще: SqlCommand.Cancel
...
Рейтинг: 0 / 0
05.02.2010, 16:34
    #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
05.02.2010, 16:43
    #36452507
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
virus_systemПрошу прощения, но не понял этого? Чем мне это поможет
В Вашем случае - ничем, забудьте.
...
Рейтинг: 0 / 0
08.02.2010, 08:37
    #36454644
virus_system
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
МСУ, sqlcommand.Cancel в принципе вариант, но при вызове метода Fill, а после метода Cancel. Возникает исключение.

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

Это нормально?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
21.12.2011, 20:44
    #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
21.12.2011, 20:47
    #37587745
SPB2011-2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
...
Рейтинг: 0 / 0
22.12.2011, 00:15
    #37588025
SPB2011-2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
Посмотрел еще на форуме надо идти к ocibreak

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

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

Кстати, что мешает использовать, например, DataReader вместо DataAdapter? В цикле чтения спокойно сможете прервать...
...
Рейтинг: 0 / 0
22.12.2011, 00:30
    #37588039
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
P.S. Исполните свой запрос через MS SMS с просмотром плана запроса, и посмотрите, можно ли увеличить скорость выполнения запроса... Sql Managment studio кстати иногда неплохо советует по созданию индексов...
...
Рейтинг: 0 / 0
22.12.2011, 01:09
    #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
22.12.2011, 01:14
    #37588082
SPB2011-2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
И продолжу, что отработанный select из dataset я скидываю в excel, оформляю и у меня готовый отчет.
...
Рейтинг: 0 / 0
22.12.2011, 10:22
    #37588335
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
Блин. Я же написал. Заполняйте не DataAdapter'ом, а DataReader'ом...
...
Рейтинг: 0 / 0
22.12.2011, 11:57
    #37588578
SPB2011-2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
Спасибо, сейчас попробую, отпишусь.
...
Рейтинг: 0 / 0
22.12.2011, 12:31
    #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
22.12.2011, 12:35
    #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
22.12.2011, 13:04
    #37588751
SPB2011-2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена выполнения запроса
Lelouch,

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

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


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