Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los consumidores usan la interfaz IMultipleResults para procesar los resultados devueltos por la ejecución de comandos del proveedor OLE DB de SQL Server Native Client. Cuando el proveedor OLE DB de SQL Server Native Client envía un comando para su ejecución, SQL Server ejecuta las instrucciones y devuelve los resultados.
Un cliente debe procesar todos los resultados de la ejecución del comando. Dado que la ejecución de comandos del proveedor OLE DB de SQL Server Native Client puede generar objetos de conjunto de filas múltiples como resultados, use la interfaz IMultipleResults para asegurarse de que la recuperación de datos de la aplicación completa el recorrido de ida y vuelta iniciado por el cliente.
La siguiente instrucción Transact-SQL genera varios conjuntos de filas, algunos que contienen datos de fila de la tabla OrderDetails y algunos que contienen los resultados de la cláusula COMPUTE BY:
SELECT OrderID, FullPrice = (UnitPrice * Quantity), Discount,
Discounted = UnitPrice * (1 - Discount) * Quantity
FROM OrderDetails
ORDER BY OrderID
COMPUTE
SUM(UnitPrice * Quantity), SUM(UnitPrice * (1 - Discount) * Quantity)
BY OrderID
Si un consumidor ejecuta un comando que contiene este texto y solicita un conjunto de filas como interfaz de resultados devueltos, solo se devuelve el primer conjunto de filas. El consumidor puede procesar todas las filas del conjunto de filas devuelto. Sin embargo, si la propiedad de origen de datos DBPROP_MULTIPLECONNECTIONS está establecida en VARIANT_FALSE y MARS no está habilitada en la conexión, no se puede ejecutar ningún otro comando en el objeto de sesión (el proveedor OLE DB de SQL Server Native Client no creará otra conexión) hasta que se cancele el comando. Si MARS no está habilitado en la conexión, el proveedor OLE DB de SQL Server Native Client devuelve un error DB_E_OBJECTOPEN si DBPROP_MULTIPLECONNECTIONS está VARIANT_FALSE y devuelve E_FAIL si hay una transacción activa.
El proveedor OLE DB de SQL Server Native Client también devolverá DB_E_OBJECTOPEN al usar parámetros de salida transmitidos y la aplicación no ha consumido todos los valores de parámetro de salida devueltos antes de llamar a IMultipleResults::GetResults para obtener el siguiente conjunto de resultados. Si MARS no está habilitado y la conexión está ocupada ejecutando un comando que no genera un conjunto de filas o que genera un conjunto de filas que no es un cursor de servidor y si la propiedad del origen de datos DBPROP_MULTIPLECONNECTIONS está establecida en VARIANT_TRUE, el proveedor OLE DB de SQL Server Native Client crea conexiones adicionales para admitir objetos de comando simultáneos, a menos que una transacción esté activa, en cuyo caso devuelve un error. SQL Server administra transacciones y bloqueos por conexión. Si se genera una segunda conexión, el comando en las conexiones independientes no comparte bloqueos. Se debe tener cuidado para asegurarse de que un comando no bloquee otro manteniendo bloqueos en las filas solicitadas por el otro comando. Si MARS está habilitado, se pueden activar varios comandos en las conexiones y, si se usan transacciones explícitas, todos los comandos comparten una transacción común.
El consumidor puede cancelar el comando mediante ISSAbort::Abort o liberando todas las referencias que se mantienen en el objeto de comando y el conjunto de filas derivados.
El uso de IMultipleResults en todas las instancias permite al consumidor obtener todos los conjuntos de filas generados por la ejecución de comandos y permite a los consumidores determinar adecuadamente cuándo cancelar la ejecución de comandos y liberar un objeto de sesión para su uso por otros comandos.
Nota:
Cuando se usan cursores de SQL Server, la ejecución de comandos crea el cursor. SQL Server devuelve éxito o error en la creación del cursor; Por lo tanto, el recorrido de ida y vuelta a la instancia de SQL Server se completa tras la devolución de la ejecución del comando. Cada llamada a GetNextRows se convierte en un recorrido de ida y vuelta. De este modo, pueden existir varios objetos de comando activos, cada uno procesando un conjunto de filas que sea el resultado de una captura desde el cursor del servidor. Para obtener más información, vea Conjuntos de filas y cursores de SQL Server.