Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 EXEC возаращает пустой recordset (ADODB)  [new]
victorov1
Member

Откуда:
Сообщений: 25
Ситуация следующая, выполняю запрос "EXEC proc_name", который возвращает некую непустую таблицу. Для подключения использую ADODB С++.
Тестирую у себя создав такую тестовую процедуру - все ок. А на сервере заказчика приходит пустой recordset без ошибок. Причем если заказчик запускает тоже самое ("EXEC proc_name") через Sql Management Studio, то возвращаются N-записей, как и должно быть.
Далее самое интересное - попробовал в качестве коннектора использовать старый delphi7 (там ADODB deprecated-версии) - и в таком случае с сервером заказчика все работает как и должно - записи возвращаются.
Кто-то сталкивался с подобным?
8 июн 21, 18:19    [22333035]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
Konst_One
Member

Откуда:
Сообщений: 11615
в вашей proc_name добавьте:

CREATE PROCEDURE proc_name
...
AS
SET NOCOUNT ON;
...
GO
8 июн 21, 19:12    [22333052]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
victorov1
Member

Откуда:
Сообщений: 25
речь не про AFFECTED ROWS, а про возвращаемый recordset данных
8 июн 21, 20:01    [22333062]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
andy st
Member

Откуда:
Сообщений: 820
victorov1, подключаете к нужному серверу профайлер, настраиваете на отлов нужных сессий, убеждаетесь что из студии с "возвращаются N записей" и запрос "возвращает пустой рекордсет" отловлен профайлером, сравниваете настройки сессий и выполняемые команды побуквенно
а то вариантов много: пользователь не тот, сервер не тот, база не та, процедура не та, параметры не те, настройки сессий разные...
8 июн 21, 21:19    [22333079]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8701
victorov1
речь не про AFFECTED ROWS, а про возвращаемый recordset данных


при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне.
8 июн 21, 22:50    [22333103]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8863
Владислав Колосов
victorov1
речь не про AFFECTED ROWS, а про возвращаемый recordset данных


при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне.

Воистину.
При этом и Delphi и SQLManagementStudio прекрасно в этом ориентируются.
9 июн 21, 02:03    [22333118]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
victorov1
Member

Откуда:
Сообщений: 25
У меня нет доступа к серверу заказчика и я не могу там ничего менять.
На моём локальном тесте set nocount on/off вообще никак не меняет ситуацию и Recordset::RecordCount правильный всегда.
Вопрос здесь в другом, почему для одного случая он равен нулю, а в другом правильный при прочих равных. Используется sql native client.
И чтобы понимали - если на сервере заказчика выполняется select ... то все работает. Почему то только с Exec проблема.
9 июн 21, 06:59    [22333130]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
court
Member

Откуда:
Сообщений: 2335
... а ТС - упорный Картинка с другого сайта.
9 июн 21, 07:12    [22333131]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
victorov1
Member

Откуда:
Сообщений: 25
Владислав Колосов
victorov1
речь не про AFFECTED ROWS, а про возвращаемый recordset данных


при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне.


Нет возможности лезть на сервер заказчика.
Да и беру всегда первый рекордсет как в Delphi, так и с++
9 июн 21, 07:31    [22333133]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31910
victorov1
Да и беру всегда первый рекордсет как в Delphi, так и с++
Тот рекордсет скрытый от обычных средств получения. Но получить данные в некоторых библиотеках доступа мешает.
victorov1
На моём локальном тесте set nocount on/off вообще никак не меняет ситуацию и Recordset::RecordCount правильный всегда.
Так и должно быть.
court
... а ТС - упорный
+1
9 июн 21, 08:43    [22333138]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
L_argo
Member

Откуда:
Сообщений: 1475
По сабжу: такое наблюдается в QlikView при зачитке из ХП.
И там SET NOCOUNT ON обязателен.
9 июн 21, 09:01    [22333141]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
Кесарь
Member

Откуда:
Сообщений: 653
L_argo
По сабжу: такое наблюдается в QlikView при зачитке из ХП.
И там SET NOCOUNT ON обязателен.


Вообще не понимаю, почему МС не сделали этот параметр принимаемым для всех хранящихся кусков кода равны ОН по умолчанию, и ОФФ только при явно указании этого.
9 июн 21, 11:14    [22333177]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8701
victorov1,

Вы должны убедиться, что SET NOCOUNT ON выполняете в том же сеансе, что и запрос.
9 июн 21, 11:16    [22333179]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
victorov1
Member

Откуда:
Сообщений: 25
Владислав Колосов
victorov1,

Вы должны убедиться, что SET NOCOUNT ON выполняете в том же сеансе, что и запрос.


SET NOCOUNT ON;
EXEC AAA;
GO

так?
9 июн 21, 14:55    [22333337]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8701
victorov1,

В SSMS это так будет выглядеть.
9 июн 21, 19:13    [22333506]     Ответить | Цитировать Сообщить модератору
 Re: EXEC возаращает пустой recordset (ADODB)  [new]
victorov1
Member

Откуда:
Сообщений: 25
Спасибо, помогло.

А delphi-код работал по след. причине: они игнорируют все закрытые recordsetы и возвращают первый opened:

while Recordset.State = adStateClosed do
try
FRecordsetObject := Recordset.NextRecordset(VarRecsAffected);
if Recordset = nil then Abort;
except
DatabaseError(SNoResultSet, Self);
end;
11 июн 21, 16:42    [22334502]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить