Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os consumidores usam a interface IMultipleResults para processar os resultados retornados pela execução do comando do provedor OLE DB do SQL Server Native Client. Quando o provedor OLE DB do SQL Server Native Client envia um comando para execução, o SQL Server executa as instruções e retorna todos os resultados.
Um cliente deve processar todos os resultados da execução do comando. Como a execução do comando do provedor OLE DB do SQL Server Native Client pode gerar objetos de conjunto de linhas múltiplos como resultados, use a interface IMultipleResults para garantir que a recuperação de dados do aplicativo conclua a viagem de ida e volta iniciada pelo cliente.
A instrução Transact-SQL a seguir gera vários conjuntos de linhas, alguns contendo dados de linha da tabela OrderDetails e alguns que contêm resultados da 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
Se um consumidor executar um comando que contém esse texto e solicitar um conjunto de linhas como a interface de resultados retornada, somente o primeiro conjunto de linhas será retornado. O consumidor pode processar todas as linhas no conjunto de linhas retornado. Mas, se a propriedade da fonte de dados DBPROP_MULTIPLECONNECTIONS estiver definida como VARIANT_FALSE e MARS não estiver habilitada na conexão, nenhum outro comando poderá ser executado no objeto de sessão (o provedor OLE DB do SQL Server Native Client não criará outra conexão) até que o comando seja cancelado. Se MARS não estiver habilitado na conexão, o provedor OLE DB do SQL Server Native Client retornará um erro de DB_E_OBJECTOPEN se DBPROP_MULTIPLECONNECTIONS estiver VARIANT_FALSE e retornar E_FAIL se houver uma transação ativa.
O provedor OLE DB do SQL Server Native Client também retornará DB_E_OBJECTOPEN ao usar parâmetros de saída transmitidos e o aplicativo não consumiu todos os valores de parâmetro de saída retornados antes de chamar IMultipleResults::GetResults para obter o próximo conjunto de resultados. Se o MARS não estiver habilitado e a conexão estiver ocupada executando um comando que não produz um conjunto de linhas ou que produz um conjunto de linhas que não seja um cursor de servidor e se a propriedade da fonte de dados DBPROP_MULTIPLECONNECTIONS estiver definida como VARIANT_TRUE, o provedor OLE DB do SQL Server Native Client criará conexões adicionais para dar suporte a objetos de comando simultâneos, a menos que uma transação esteja ativa, nesse caso, ela retornará um erro. As transações e o bloqueio são gerenciados pelo SQL Server por conexão. Se uma segunda conexão for gerada, o comando nas conexões separadas não compartilhará bloqueios. É necessário ter cuidado para garantir que um comando não bloqueie outro mantendo bloqueios em linhas solicitadas pelo outro comando. Se o MARS estiver habilitado, vários comandos poderão estar ativos nas conexões e, se transações explícitas estiverem sendo usadas, todos os comandos compartilharão uma transação comum.
O consumidor pode cancelar o comando usando ISSAbort::Abort ou liberando todas as referências mantidas no objeto de comando e no conjunto de linhas derivado.
O uso de IMultipleResults em todas as instâncias permite que o consumidor obtenha todos os conjuntos de linhas gerados pela execução de comando e permite que os consumidores determinem adequadamente quando cancelar a execução do comando e liberar um objeto de sessão para uso por outros comandos.
Observação
Quando você usa cursores do SQL Server, a execução de comando cria o cursor. O SQL Server retorna êxito ou falha na criação do cursor; portanto, a viagem de ida e volta para a instância do SQL Server é concluída após o retorno da execução do comando. Cada chamada GetNextRows se torna uma viagem de ida e volta. Dessa forma, vários objetos de comando ativos podem existir, cada um processando um conjunto de linhas que é o resultado de uma busca do cursor do servidor. Para obter mais informações, consulte Conjuntos de linhas e cursores do SQL Server.