Por que não consigo retornar um conjunto de registros usando OLEDB em um procedimento armazenado?
Certa vez escrevi um programa que opera em uma tabela temporária (a função principal é recuperar os 10 principais registros de cada categoria).
O procedimento armazenado usa ODBC para se conectar ao banco de dados normalmente e pode obter resultados corretos. Mas ao usar oledb para conectar, o conjunto de registros não pode ser retornado e, uma vez que a operação retorna o conjunto de registros, uma mensagem de erro aparece:
Erro ADODB.Recordset '800a0e78'
A operação solicitada pela aplicação não é permitida se o objeto estiver fechado.
Isso me deixa perplexo. por que é que?
Isso ocorre porque existe uma diferença entre OLEDB e ODBC, ou seja, quando o ASP obtém o conjunto de registros do ODBC, o ODBC filtra os registros criados pela tabela de criação.
Ou insert into gera alguns conjuntos de registros que ocupam apenas posições, mas não podem realizar nenhuma operação. Quando o ASP obtém o conjunto de registros do OLEDB, o OLEDB não o faz.
Esses conjuntos de registros não são filtrados. Portanto, devemos executar set nocount on antes de retornar o conjunto de registros no procedimento armazenado.
Os procedimentos armazenados são proibidos de retornar conjuntos de registros; para retornar conjuntos de registros, set nocount off deve ser executado primeiro. Desta forma, o problema será resolvido.