Почему я не могу вернуть набор записей с помощью OLEDB в хранимой процедуре?
Однажды я написал программу, которая работает с временной таблицей (основная функция — получение 10 лучших записей каждой категории).
Хранимая процедура использует ODBC для обычного подключения к базе данных и может получить правильные результаты. Но при использовании oledb для подключения набор записей не может быть возвращен, и как только операция возвращает набор записей, появляется сообщение об ошибке:
Ошибка ADODB.Recordset «800a0e78»
Операция, запрошенная приложением, не разрешена, если объект закрыт.
Это сбивает меня с толку. почему это?
Это связано с тем, что существует разница между OLEDB и ODBC: когда ASP получает набор записей из ODBC, ODBC отфильтровывает записи, созданные при создании таблицы.
Или вставка в создает несколько наборов записей, которые только занимают позиции, но не могут выполнять никаких операций. Когда ASP получает набор записей из OLEDB, OLEDB этого не делает.
Эти наборы записей не отфильтровываются. Поэтому нам следует выполнить set nocount on перед возвратом набора записей в хранимую процедуру.
Хранимым процедурам запрещено возвращать наборы записей; чтобы вернуть наборы записей, сначала необходимо выполнить set nocount off. Таким образом, проблема будет решена.