Partager via


Mise à jour des données dans les curseurs SQL Server

Lors de l'extraction et de la mise à jour de données via les curseurs SQL Server, une application du consommateur du fournisseur OLE DB SQL Server est liée par les mêmes considérations et contraintes que celles qui s'appliquent à toute autre application cliente.

Seules les lignes des curseurs SQL Server participent à un contrôle de simultanéité d'accès aux données. Lorsque le consommateur demande un ensemble de lignes modifiable, le contrôle de simultanéité est vérifié par DBPROP_LOCKMODE. Pour modifier le niveau de contrôle d'accès simultané, le consommateur définit la propriété DBPROP_LOCKMODE avant d'ouvrir l'ensemble de lignes.

Les niveaux d'isolation de la transaction peuvent provoquer des décalages significatifs dans la position des lignes si la conception de l'application cliente permet aux transactions de demeurer ouvertes sur une longue période de temps. Par défaut, le fournisseur OLE DB SQL Server Native Client utilise le niveau d'isolation de lecture validée spécifié par DBPROPVAL_TI_READCOMMITTED. Le fournisseur OLE DB SQL Server Native Client prend en charge l'isolation de lecture erronée quand la concurrence d'ensembles de lignes est en lecture seule. Par conséquent, le consommateur peut demander un niveau supérieur d'isolation dans un ensemble de lignes modifiable, mais il ne peut pas demander avec succès un niveau inférieur.

Modes de mises à jour immédiat et différé

En mode de mise à jour immédiat, chaque appel de IRowsetChange::SetData entraîne un aller-retour vers SQL Server. Si le consommateur apporte plusieurs modifications à une seule ligne, il est plus efficace de soumettre toutes les modifications avec un seul appel de SetData.

En mode de mise à jour différé, un aller-retour vers SQL Server a lieu pour chaque ligne indiquée dans les paramètres cRows et rghRows de IRowsetUpdate::Update.

Dans l'un et l'autre mode, un aller-retour représente une transaction distincte quand aucun objet de transaction n'est ouvert pour l'ensemble de lignes.

Lorsque vous utilisez IRowsetUpdate::Update, le fournisseur OLE DB SQL Server Native Client essaie de traiter chaque ligne indiquée. Une erreur se produisant en raison de données, de longueurs ou de valeurs d'état non valides n'interrompt pas le traitement du fournisseur OLE DB SQL Server Native Client. La totalité des autres lignes prenant part à la mise à jour peut être modifiée. Le consommateur doit examiner le tableau prgRowStatus retourné rangent pour déterminer l'échec d'une ligne spécifique lorsque le fournisseur OLE DB SQL Server Native Client retourne DB_S_ERRORSOCCURRED.

Un consommateur ne doit pas présumer que les lignes sont traitées selon un ordre spécifique. Si un consommateur a besoin d'un traitement ordonné de la modification des données sur plusieurs lignes, le consommateur doit établir cet ordre dans la logique de l'application et ouvrir une transaction pour encadrer le processus.

Voir aussi

Concepts

Mise à jour des données dans les ensembles de lignes