Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
KeeperRU Member Откуда: Сообщений: 43 |
P.S. Возможно ошибка не в этом (так как лично зафиксировать ошибку еще не удалось). Просто хочу убедиться, так ли работает COM-соединение или нет. |
12 янв 15, 12:15 [17105210] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А с чего ожидание блокировки должно выбрасывать какое-то исключение ?
Наверное потому, что никто не проверяет, что команда была прекращена по установленному вами же таймауту |
||||
12 янв 15, 12:15 [17105215] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8300 |
IF Connection.Execute() <0 MESSAGEBOX() etc... ? |
12 янв 15, 12:16 [17105224] Ответить | Цитировать Сообщить модератору |
KeeperRU Member Откуда: Сообщений: 43 |
А как правильно проверить что команда была выполнена?
Execute возвращает Recordset, а не Int. А что если команда выполнилась, просто ничего не обновила, потому что обновлять нечего (по связи ничего не нашлось)? Следовательно и Recordset пустой. В таком случае ошибка не должна выкидываться, ведь по сути запрос то выполнился, а не завис или еще чего. |
||||||||
12 янв 15, 12:28 [17105296] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Изучить свой ЯзыкПрограммирования. Спросить на соответствующем форуме, как обрабатывать серверные сообщения |
||
12 янв 15, 12:30 [17105308] Ответить | Цитировать Сообщить модератору |
KeeperRU Member Откуда: Сообщений: 43 |
А причем тут свой язык? Тут в данном случае, он никак не поможет. Дело в библиотеке, в которой я не очень опытен. Библиотека: Microsoft ActiveX Data Objects 2.8 Library По документации не могу понять, как проверить что Execute действительно был выполнен, а не завершен по таймауту. |
||||
12 янв 15, 12:36 [17105334] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы не заметили, что пишите клиентский код на чем-то отличном от TSQL ?
А причем тут MSSQL тогда ? |
||||
12 янв 15, 12:39 [17105348] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
set rs = cn.Execute(SQL) 'rs - ADODB.Recordset + проверьте наличие ответа + тк у вас update, то используйте OUTPUT или переделайте через ХП +сделайте обработку исключений |
12 янв 15, 12:40 [17105353] Ответить | Цитировать Сообщить модератору |
KeeperRU Member Откуда: Сообщений: 43 |
Проверил - на блокировку таблицы, исключение выбрасывается. Значит дело в другом, всем спасибо. |
12 янв 15, 13:44 [17105776] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |