¿Por qué no puedo devolver un conjunto de registros usando OLEDB en un procedimiento almacenado?
Una vez escribí un programa que opera en una tabla temporal (la función principal es recuperar los 10 registros principales de cada categoría).
El procedimiento almacenado utiliza ODBC para conectarse a la base de datos normalmente y puede obtener resultados correctos. Pero cuando se usa oledb para conectarse, el conjunto de registros no se puede devolver y una vez que la operación devuelve el conjunto de registros, aparece un mensaje de error:
ADODB.Error de conjunto de registros '800a0e78'
La operación solicitada por la aplicación no está permitida si el objeto está cerrado.
Me desconcierta. ¿porqué es eso?
Esto se debe a que existe una diferencia entre OLEDB y ODBC, es decir, cuando ASP obtiene el conjunto de registros de ODBC, ODBC filtra los registros creados mediante la tabla de creación.
O insertar en genera algunos conjuntos de registros que solo ocupan posiciones pero no pueden realizar ninguna operación. Cuando ASP obtiene el conjunto de registros de OLEDB, OLEDB no.
Estos conjuntos de registros no se filtran. Por lo tanto, debemos ejecutar set nocount on antes de devolver el conjunto de registros en el procedimiento almacenado.
Los procedimientos almacenados tienen prohibido devolver conjuntos de registros; para devolver conjuntos de registros, primero se debe ejecutar set nocount off. De esta forma se solucionará el problema.