Atualizando dados em cursores do SQL Server
Ao buscar e atualizar dados por meio de cursores SQL Server, um SQL Server Native Client aplicativo de consumidor do provedor OLE DB é associado 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 provedor OLE DB do SQL Server Native Client usa o nível de isolamento de leitura confirmada especificado por DBPROPVAL_TI_READCOMMITTED. O provedor OLE DB do SQL Server Native Client dá suporte sujo isolamento de leitura 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.
Quando você estiver usando IRowsetUpdate::Update, o provedor SQL Server Native Client OLE DB tentará processar cada linha indicada. Um erro que ocorre devido a dados inválidos, comprimento ou valores de status para qualquer linha não interrompe SQL Server Native Client processamento do provedor OLE DB. É possível modificar todas ou nenhuma das outras linhas que participam da atualização. O consumidor deve examinar a matriz prgRowStatus retornada para determinar a falha de qualquer linha específica quando o provedor OLE DB SQL Server Native Client retornar 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.