Atualizando dados em cursores do SQL Server
Ao buscar e atualizar dados por meio de cursores do SQL Server, um aplicativo do consumidor do provedor OLE DB do SQL Server Native Client é 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 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 de IRowsetChange::SetData gera uma viagem de ida e volta ao SQL Server. Se o consumidor fizer várias alterações a uma única linha, será mais eficiente enviar todas as alterações com uma única chamada de SetData.
No modo de atualização atrasado, 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 provedor OLE DB do SQL Server Native Client tenta processar cada linha indicada. Um erro que ocorre por causa de valores de status, comprimento ou dados inválidos para qualquer linha não interrompe o processamento do provedor OLE DB do SQL Server Native Client. É 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 para qualquer linha específica quando o provedor OLE DB do SQL Server Native Client 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.