Partager via


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

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

Télécharger le pilote OLE DB

Lorsque vous récupérez (fetch) et mettez à jour des données via des curseurs SQL Server, l’application de contrôle serveur consommateur OLE DB Driver pour SQL Server est liée par les mêmes 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 pilote OLE DB pour SQL Server utilise le niveau d’isolation Lecture validée spécifié par DBPROPVAL_TI_READCOMMITTED. OLE DB Driver pour SQL Server 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é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, OLE DB Driver pour SQL Server essaie de traiter chaque ligne indiquée. Une erreur liée à des données, des longueurs ou des valeurs d’état non valides n’interrompt pas le traitement du pilote OLE DB pour SQL Server. 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 pilote OLE DB pour SQL Server 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