Uppdatering av data i SQL Server-kursorer i SQL Server Native Client

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

När data hämtas och uppdateras via SQL Server-kursorer är en konsumentapplikation för SQL Server Native Client OLE DB-leverantör bunden av samma överväganden och begränsningar som gäller för alla andra klientapplikationer.

Endast rader i SQL Server-kursorer deltar i samtidig dataåtkomstkontroll. När konsumenten begär en modifierbar raduppsättning styrs samtidighetskontrollen av DBPROP_LOCKMODE. För att ändra nivån av samtidig åtkomstkontroll sätter konsumenten egenskapen DBPROP_LOCKMODE innan raduppsättningen öppnas.

Transaktionsisoleringsnivåer kan orsaka betydande fördröjningar i radpositionering om klientapplikationsdesignen låter transaktioner vara öppna under långa perioder. Som standard använder den inbyggda klient OLE DB-leverantören SQL Server den läs-committerade isoleringsnivån som anges av DBPROPVAL_TI_READCOMMITTED. SQL Server Native Client OLE DB-leverantören stödjer dirty read isolation när raduppsättningssamvarigheten är skrivskyddad. Därför kan konsumenten begära en högre nivå av isolering i en modifierbar raduppsättning men kan inte begära någon lägre nivå framgångsrikt.

Omedelbara och fördröjda uppdateringslägen

I omedelbar uppdateringsläge orsakar varje anrop till IRowsetChange::SetData en rundresa till SQL Server. Om konsumenten gör flera ändringar i en enda rad är det mer effektivt att skicka alla ändringar med ett enda SetData-anrop .

I fördröjd uppdateringsläge görs en rundresa till SQL Server för varje rad som anges i parametrarna cRows och rghRows i IRowsetUpdate::Update.

I båda lägena representerar en rundresa en distinkt transaktion när inget transaktionsobjekt är öppet för radmängden.

När du använder IRowsetUpdate::Update, försöker SQL Server Native Client OLE DB-leverantören bearbeta varje angiven rad. Ett fel som uppstår på grund av ogiltig data, längd eller statusvärden för någon rad stoppar inte SQL Server Native Client OLE DB-leverantörens bearbetning. Alla eller inga av de andra raderna som deltar i uppdateringen kan ändras. Konsumenten måste undersöka den returnerade prgRowStatus-arrayen för att avgöra fel för en specifik rad när den SQL Server Native Client OLE DB-leverantören returnerar DB_S_ERRORSOCCURRED.

En konsument bör inte anta att rader behandlas i någon specifik ordning. Om en konsument kräver ordnad bearbetning av dataändring över mer än en rad bör konsumenten etablera den ordningen i applikationslogiken och öppna en transaktion för att omsluta processen.