Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Consumenten gebruiken de IMultipleResults-interface om resultaten te verwerken die worden teruggegeven door de uitvoering van commandoopdrachten van de SQL Server Native Client OLE, DB-provider. Wanneer de SQL Server Native Client OLE DB-provider een commando voor uitvoering indient, voert SQL Server de statements uit en geeft alle resultaten terug.
Een client moet alle resultaten van de uitvoering van commando's verwerken. Omdat de uitvoering van commandoopdrachten van de SQL Server Native Client OLE DB-provider als resultaat meerdere rijsetobjecten kan genereren, gebruik de IMultipleResults-interface om ervoor te zorgen dat applicatiegegevensopvraging de door de client geïnitieerde rondreis voltooit.
De volgende Transact-SQL-instructie genereert meerdere rijsets, waarvan sommige rijgegevens uit de OrderDetails-tabel bevatten en sommige resultaten van de COMPUTE BY-clausule:
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
Als een consument een commando uitvoert met deze tekst en een rijset aanvraagt als de geretourneerde resultaatinterface, wordt alleen de eerste set rijen teruggegeven. De consument kan alle rijen in de teruggegeven rijset verwerken. Maar als de eigenschap DBPROP_MULTIPLECONNECTIONS databron op VARIANT_FALSE staat en MARS niet is ingeschakeld op de verbinding, kunnen er geen andere commando's op het sessieobject worden uitgevoerd (de SQL Server Native Client OLE DB-provider maakt geen nieuwe verbinding aan) totdat het commando wordt geannuleerd. Als MARS niet is ingeschakeld op de verbinding, geeft de SQL Server Native Client OLE DB-provider een DB_E_OBJECTOPEN foutmelding als DBPROP_MULTIPLECONNECTIONS VARIANT_FALSE is en E_FAIL als er een actieve transactie is.
De SQL Server Native Client OLE DB-provider zal ook DB_E_OBJECTOPEN teruggeven bij gebruik van gestreamde outputparameters en de applicatie heeft niet alle teruggegeven outputparameters gebruikt voordat IMultipleResults::GetResults wordt aangeroepen om de volgende resultaatset op te halen. Als MARS niet is ingeschakeld en de verbinding bezig is met het uitvoeren van een commando dat geen rijset produceert of een rijset produceert die geen servercursor is, en als de eigenschap van de DBPROP_MULTIPLECONNECTIONS databron op VARIANT_TRUE is gezet, maakt de SQL Server Native Client OLE DB-provider extra verbindingen om gelijktijdige commandoobjecten te ondersteunen, tenzij een transactie actief is, in welk geval een foutmelding wordt teruggegeven. Transacties en vergrendeling worden per verbinding beheerd door SQL Server. Als een tweede verbinding wordt gegenereerd, deelt het commando op de afzonderlijke verbindingen geen locks. Er moet voorzichtig worden geacht dat het ene commando het andere niet blokkeert door sloten vast te houden op de door het andere commando gevraagde rijen. Als MARS is ingeschakeld, kunnen meerdere commando's actief zijn op de verbindingen en als expliciete transacties worden gebruikt, delen alle commando's een gemeenschappelijke transactie.
De consument kan het commando annuleren door ISSAbort::Abort te gebruiken of door alle referenties op het commandoobject en de afgeleide rijset vrij te geven.
Door IMultipleResults in alle instanties te gebruiken, kan de consument alle rijsets die door commando-uitvoering worden gegenereerd ophalen en kan consumenten op passende wijze bepalen wanneer de commando-uitvoering geannuleerd moet worden en een sessieobject vrijgemaakt wordt voor gebruik door andere commando's.
Note
Wanneer je SQL Server-cursors gebruikt, creëert command execution de cursor. SQL Server geeft succes of falen terug bij het aanmaken van de cursor; daarom is de retour naar de instantie van SQL Server voltooid zodra de commando-uitvoering terugkeert. Elke GetNextRows-oproep wordt dan een retour. Op deze manier kunnen meerdere actieve commando-objecten bestaan, elk met een rijset die het resultaat is van een fetch van de servercursor. Voor meer informatie, zie Rowsets en SQL Server Cursors.