Aggiornamento dei dati nei cursori di SQL Server in SQL Server Native Client
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Durante il recupero e l'aggiornamento dei dati tramite cursori di SQL Server, un'applicazione consumer del provider OLE DB di SQL Server Native Client è vincolata dagli stessi vincoli e considerazioni applicabili a qualsiasi altra applicazione client.
Solo le righe dei cursori SQL Server partecipano al controllo di accesso ai dati simultaneo. Quando il consumer richiede un set di righe modificabile, il controllo della concorrenza viene effettuato da DBPROP_LOCKMODE. Per modificare il livello di controllo di accesso simultaneo, il consumer imposta la proprietà DBPROP_LOCKMODE prima di aprire il set di righe.
I livelli di isolamento della transazione possono provocare ritardi significativi nel posizionamento delle righe se la progettazione delle applicazioni client lascia aperte le transazioni per lunghi periodi di tempo. Per impostazione predefinita, il provider OLE DB di SQL Server Native Client usa il livello di isolamento read committed specificato da DBPROPVAL_TI_READCOMMITTED. Il provider OLE DB di SQL Server Native Client supporta l'isolamento di lettura dirty quando la concorrenza del set di righe è di sola lettura. In un set di righe modificabile il consumer può pertanto richiedere un livello di isolamento superiore ma non inferiore.
Modalità di aggiornamento immediato e posticipato
In modalità di aggiornamento immediato, ogni chiamata a IRowsetChange::SetData provoca un round trip al computer SQL Server. Se il consumer apporta più modifiche a una sola riga, risulta più efficiente inviare tutte le modifiche con un'unica chiamata a SetData.
In modalità di aggiornamento posticipato, viene eseguito un round trip al computer SQL Server per ogni riga indicata nei parametri cRows e rghRows di IRowsetUpdate::Update.
In entrambe le modalità un round trip rappresenta una transazione distinta quando per il set di righe non è aperto alcun oggetto transazione.
Quando si usa IRowsetUpdate::Update, il provider OLE DB di SQL Server Native Client tenta di elaborare ogni riga indicata. Si è verificato un errore a causa di dati, lunghezza o valori di stato non validi per qualsiasi riga non arresta l'elaborazione del provider OLE DB di SQL Server Native Client. È possibile che vengano modificate tutte o nessuna delle altre righe che partecipano all'aggiornamento. Il consumer deve esaminare la matrice prgRowStatus restituita per determinare l'errore di una riga specifica quando il provider OLE DB di SQL Server Native Client restituisce DB_S_ERRORSOCCURRED.
Un consumer non deve presupporre che le righe vengano elaborate in base a un ordine specifico. Se un consumer richiede un'elaborazione ordinata di modifica dei dati su più di una riga, deve stabilire l'ordine nella logica dell'applicazione e aprire una transazione per includere il processo.