Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
KeeperRU
Member

Откуда:
Сообщений: 43
Суть проблемы, подключаюсь к SQL-базе через COM-соединение, хочу выполнить запрос на UPDATE.
Иногда UPDATE не выполняется (90% скорее всего из-за блокировки таблицы), но при этом исключение не выбрасывается и программа идет дальше и завершается успешно.

Примерный код:
Connection.ConnectionString(txtConnectionString);
Connection.ConnectionTimeout(15);
Connection.Open;
Connection.CommandTimeout(600);

Connection.Execute('UPDATE ........);
Connection.CLOSE;


Я так понимаю, если запрос не проходит по таймауту, то должна выскочить ошибка. Может какой-то параметр забыл установить?
Повторить ошибку вручную пока не могу, случай редкий.
12 янв 15, 12:11    [17105179]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
KeeperRU
Member

Откуда:
Сообщений: 43
P.S. Возможно ошибка не в этом (так как лично зафиксировать ошибку еще не удалось).
Просто хочу убедиться, так ли работает COM-соединение или нет.
12 янв 15, 12:15    [17105210]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
Glory
Member

Откуда:
Сообщений: 104760
KeeperRU
но при этом исключение не выбрасывается

А с чего ожидание блокировки должно выбрасывать какое-то исключение ?

KeeperRU
и программа идет дальше и завершается успешно.

Наверное потому, что никто не проверяет, что команда была прекращена по установленному вами же таймауту
12 янв 15, 12:15    [17105215]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8300
IF Connection.Execute() <0
MESSAGEBOX()
etc...
?
12 янв 15, 12:16    [17105224]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
KeeperRU
Member

Откуда:
Сообщений: 43
Glory
KeeperRU
но при этом исключение не выбрасывается

А с чего ожидание блокировки должно выбрасывать какое-то исключение ?

KeeperRU
и программа идет дальше и завершается успешно.

Наверное потому, что никто не проверяет, что команда была прекращена по установленному вами же таймауту


А как правильно проверить что команда была выполнена?

Владислав Колосов
IF Connection.Execute() <0

Execute возвращает Recordset, а не Int.

А что если команда выполнилась, просто ничего не обновила, потому что обновлять нечего (по связи ничего не нашлось)? Следовательно и Recordset пустой. В таком случае ошибка не должна выкидываться, ведь по сути запрос то выполнился, а не завис или еще чего.
12 янв 15, 12:28    [17105296]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
Glory
Member

Откуда:
Сообщений: 104760
KeeperRU
А как правильно проверить что команда была выполнена?

Изучить свой ЯзыкПрограммирования. Спросить на соответствующем форуме, как обрабатывать серверные сообщения
12 янв 15, 12:30    [17105308]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
KeeperRU
Member

Откуда:
Сообщений: 43
Glory
KeeperRU
А как правильно проверить что команда была выполнена?

Изучить свой ЯзыкПрограммирования. Спросить на соответствующем форуме, как обрабатывать серверные сообщения


А причем тут свой язык? Тут в данном случае, он никак не поможет. Дело в библиотеке, в которой я не очень опытен.

Библиотека: Microsoft ActiveX Data Objects 2.8 Library
По документации не могу понять, как проверить что Execute действительно был выполнен, а не завершен по таймауту.
12 янв 15, 12:36    [17105334]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
Glory
Member

Откуда:
Сообщений: 104760
KeeperRU
А причем тут свой язык?

Вы не заметили, что пишите клиентский код на чем-то отличном от TSQL ?

KeeperRU
Тут в данном случае, он никак не поможет. Дело в библиотеке, в которой я не очень опытен.

А причем тут MSSQL тогда ?
12 янв 15, 12:39    [17105348]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
set rs = cn.Execute(SQL) 'rs - ADODB.Recordset

+ проверьте наличие ответа
+ тк у вас update, то используйте OUTPUT или переделайте через ХП
+сделайте обработку исключений
12 янв 15, 12:40    [17105353]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы не выкидывает исключение при выполнении запроса через COM?  [new]
KeeperRU
Member

Откуда:
Сообщений: 43
Проверил - на блокировку таблицы, исключение выбрасывается.
Значит дело в другом, всем спасибо.
12 янв 15, 13:44    [17105776]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить