Partilhar via


Atualizando dados em cursores do SQL Server

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Base de dados SQL no Microsoft Fabric

Baixar driver OLE DB

Ao buscar e atualizar dados através de cursores SQL Server, uma aplicação de consumo com um Driver OLE DB para SQL Server está sujeita às mesmas considerações e restrições que se aplicam a qualquer outra aplicação cliente.

Apenas as linhas nos cursores do SQL Server participam no controlo concorrente de acesso aos dados. Quando o consumidor solicita um conjunto de linhas modificável, o controlo de concorrência é controlado por DBPROP_LOCKMODE. Para modificar o nível do controlo de acesso concorrente, o consumidor define a propriedade DBPROP_LOCKMODE antes de abrir o conjunto de linhas.

Os níveis de isolamento das transações podem causar atrasos significativos no posicionamento das linhas se o design da aplicação cliente permitir que as transações permaneçam abertas durante longos períodos. Por defeito, o Driver OLE DB para SQL Server utiliza o nível de isolamento read-commit especificado por DBPROPVAL_TI_READCOMMITTED. O Driver OLE DB para SQL Server suporta isolamento de leitura suja quando a concorrência do conjunto de linhas é apenas de leitura. Assim, o consumidor pode solicitar um nível mais elevado de isolamento num conjunto de linhas modificável, mas não pode solicitar nenhum nível inferior com sucesso.

Modos de Atualização Imediata e Atrasada

Em modo de atualização imediata, cada chamada para IRowsetChange::SetData provoca uma viagem de ida e volta ao SQL Server. Se o consumidor fizer múltiplas alterações numa única linha, é mais eficiente submeter todas as alterações com uma única chamada SetData .

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

Em qualquer dos modos, uma ida e volta representa uma transação distinta quando nenhum objeto de transação está aberto para o conjunto de linhas.

Quando está a usar IRowsetUpdate::Update, o Driver OLE DB para SQL Server tenta processar cada linha indicada. Um erro que ocorre devido a dados, comprimento ou valores de estado inválidos para qualquer linha não impede o processamento do Driver OLE DB para SQL Server. Todas ou nenhuma das outras linhas participantes na atualização podem ser modificadas. O consumidor deve examinar o array prgRowStatus devolvido para determinar a falha de qualquer linha específica quando o Driver OLE DB para SQL Server devolve DB_S_ERRORSOCCURRED.

Um consumidor não deve assumir que as linhas são processadas numa ordem específica. Se um consumidor exigir um processamento ordenado de modificação de dados em mais do que uma única linha, o consumidor deve estabelecer essa ordem na lógica da aplicação e abrir uma transação para encerrar o processo.

Ver também

Atualização de Dados em Conjuntos de Linhas