Partilhar via


Atualizando dados em cursores do SQL Server

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Baixar o driver do OLE DB

Ao buscar e atualizar dados por meio de cursores do SQL Server, um aplicativo de consumidor do Driver do OLE DB para SQL Server é limitado pelas mesmas considerações e restrições que se aplicam a qualquer outro aplicativo cliente.

Apenas as linhas em cursores do SQL Server participam do controle de acesso a dados simultâneo. Quando o consumidor solicita um conjunto de linhas modificável, o controle de simultaneidade é controlado por DBPROP_LOCKMODE. Para modificar o nível do controle de acesso simultâneo, o consumidor define a propriedade DBPROP_LOCKMODE antes de abrir o conjunto de linhas.

Os níveis de isolamento da transação podem gerar defasagens significativas no posicionamento de linhas, se o design do aplicativo cliente permitir que as transações permaneçam abertas por longos períodos. Por padrão, o OLE DB Driver for SQL Server usa o nível de isolamento de leitura confirmada especificado por DBPROPVAL_TI_READCOMMITTED. O Driver do OLE DB para SQL Server dá suporte ao isolamento de leitura suja quando a simultaneidade do conjunto de linhas é somente leitura. Assim, o consumidor pode solicitar um nível mais alto de isolamento em um conjunto de linhas modificável, mas não pode solicitar nenhum nível inferior com êxito.

Modos de atualização imediatos e atrasados

No modo de atualização imediato, cada chamada a IRowsetChange::SetData causa uma viagem de ida e volta ao SQL Server. Se o consumidor fizer várias alterações em uma única linha, será mais eficiente enviar todas as alterações com uma única chamada de SetData.

No modo de atualização atrasada, uma viagem de ida e volta é feita ao SQL Server para cada linha indicada nos parâmetros cRows e rghRows de IRowsetUpdate::Update.

Em qualquer modo, uma viagem de ida e volta representará uma transação distinta quando nenhum objeto de transação estiver aberto para o conjunto de linhas.

Ao usar IRowsetUpdate::Update, o Driver do OLE DB para SQL Server tenta processar cada linha indicada. Um erro que ocorre devido a valores de status, tamanho ou dados inválidos para qualquer linha não interrompe o processamento do OLE DB Driver for SQL Server. É possível modificar todas ou nenhuma das outras linhas que participam da atualização. O consumidor precisa examinar a matriz prgRowStatus retornada para determinar a falha de qualquer linha específica quando o OLE DB Driver for SQL Server retorna DB_S_ERRORSOCCURRED.

Um consumidor não deve presumir que as linhas são processadas em qualquer ordem específica. Se um consumidor solicitar o processamento ordenado da modificação de dados em mais de uma única linha, ele deverá estabelecer essa ordem na lógica do aplicativo e abrir uma transação para conter o processo.

Consulte Também

Atualizando dados em conjuntos de linhas