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

Откуда:
Сообщений: 13
Друзья,
кто-нибудь сталкивался с такой проблемой:
при использовании в скритпе-источнике рекордсета временных таблиц рекордсет не инициируется.
Вот грубый пример:

sql_1 ="declare @t int;
set @t=1024;
select @t"


sql_2 ="create table #temp (tt int null);
declare @t int;
set @t=1024;
insert into #temp (tt) select @t;
select tt from #temp"


При sql=sql_1 для нижеследующего фрагмента кода всё выполняется отлично.
При sql=sql_2 возникает ошибка "Операция не допускается, если объект закрыт" на исполнении строки If .EOF Then.
        Dim rs As Object = CreateObject("ADODB.Recordset")
        With rs
            .ActiveConnection = ado

           .Source = sql

            .Open()
            If .EOF Then

                 ......

            End If

            ....

        End With

При этом вариации sql-скрипта могут быть разные, но даже если #temp используется при формировании строки @ss путём аккумуляции её записей (курсором) и последующим селектом select @ss (т.е. без прямого обращения к #temp),
возникает та же ошибка.
В чём дело?
1 ноя 11, 13:11    [11532258]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Recordset - использование временных таблиц  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
вы бы юзали ADODB.Command и сделали бы в базе нужные вам ХП
1 ноя 11, 13:14    [11532296]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Recordset - использование временных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
garin
При sql=sql_2 возникает ошибка "Операция не допускается, если объект закрыт" на исполнении строки If .EOF Then.

или SET NOCOUNT ON в начало
или перебирайте _все_ возвращаемые рекордсеты
1 ноя 11, 13:14    [11532299]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Recordset - использование временных таблиц  [new]
garin
Member

Откуда:
Сообщений: 13
Command использовать в моём случае, я так понимаю, никак - мне нужен массив данных, возвращаемый рекордсетом.

SET NOCOUNT ON - всё разрулило.

Спасибо!
1 ноя 11, 13:30    [11532550]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить