Partager via


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

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Lors de l’extraction et de la mise à jour des données via des curseurs SQL Server, une application consommateur du fournisseur OLE DB SQL Server Native Client est liée par les mêmes considérations et contraintes 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 en lecture validée spécifié par DBPROPVAL_TI_READCOMMITTED. Le fournisseur OLE DB SQL Server Native Client prend en charge l’isolation de lecture incorrecte lorsque la concurrence de l’ensemble 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édiate, chaque appel à 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 à SetData.

En mode de mise à jour différée, 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 tente de traiter chaque ligne indiquée. Une erreur s’est produite en raison de données, de longueur ou de valeurs d’état non valides pour une ligne qui n’arrête 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é 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

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