Partager via


Fonction JetGetLock

S’applique à : Windows | Windows Server

Fonction JetGetLock

La fonction JetGetLock permet de réserver explicitement la possibilité de mettre à jour une ligne, d’écrire un verrou ou d’empêcher explicitement une ligne d’être mise à jour par toute autre session, verrou en lecture. Normalement, les verrous d’écriture de ligne sont acquis implicitement à la suite de la mise à jour des lignes. Les verrous de lecture ne sont généralement pas nécessaires en raison du contrôle de version des enregistrements. Toutefois, dans certains cas, une transaction peut souhaiter verrouiller explicitement une ligne pour appliquer la sérialisation, ou pour s’assurer qu’une opération ultérieure aboutira en raison du fait que les verrous requis ont déjà été pris.

JET_ERR JET_API JetGetLock(
  __in          JET_SESID sesid,
  __in          JET_TABLEID tableid,
  __in          JET_GRBIT grbit
);

Paramètres

sesid

Session qui sera utilisée pour cet appel.

tableid

Curseur qui sera utilisé pour cet appel.

grbit

Groupe de bits contenant les options à utiliser pour cet appel, qui incluent zéro ou plusieurs des éléments suivants :

Valeur

Signification

JET_bitReadLock

Cet indicateur entraîne l’acquisition d’un verrou de lecture sur l’enregistrement actif. Les verrous de lecture ne sont pas compatibles avec les verrous d’écriture déjà détenus par d’autres sessions, mais ils sont compatibles avec les verrous de lecture détenus par d’autres sessions.

JET_bitWriteLock

Cet indicateur entraîne l’acquisition d’un verrou d’écriture sur l’enregistrement actif. Les verrous d’écriture ne sont pas compatibles avec les verrous d’écriture ou de lecture détenus par d’autres sessions, mais sont compatibles avec les verrous de lecture détenus par la même session.

Valeur renvoyée

Cette fonction retourne le type de données JET_ERR avec l’un des codes de retour suivants. Pour plus d’informations sur les erreurs ESE possibles, consultez Erreurs du moteur de stockage extensible et Paramètres de gestion des erreurs.

Code de retour

Description

JET_errSuccess

L’opération s’est terminée avec succès.

JET_errClientRequestToStopJetService

Il n’est pas possible d’effectuer l’opération, car toutes les activités sur le instance associées à la session ont cessé à la suite d’un appel à JetStopService.

JET_errInstanceUnavailable

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session a rencontré une erreur irrécupérable qui exige que l’accès à toutes les données soit révoqué pour protéger l’intégrité de ces données. Cette erreur sera retournée uniquement par Windows XP et les versions ultérieures.

JET_errInvalidgrbit

Le grbit donné n’est ni JET_bitReadLock ni JET_bitWriteLock. Il doit s’agir de l’un de ces deux indicateurs.

JET_errNoCurrentRecord

Le curseur doit se trouver sur un enregistrement pour pouvoir acquérir un verrou. Les verrous sont toujours sur les enregistrements.

JET_errNotInitialized

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session n’a pas encore été initialisé.

JET_errNotInTransaction

Les verrous ne peuvent être acquis que par les sessions d’une transaction.

JET_errPermissionDenied

Le curseur ne peut pas être en lecture seule et acquérir un verrou d’écriture.

JET_errRestoreInProgress

Il n’est pas possible d’effectuer l’opération, car une opération de restauration est en cours sur le instance associé à la session.

JET_errSessionSharingViolation

La même session ne peut pas être utilisée pour plusieurs threads en même temps. Cette erreur sera retournée uniquement par Windows XP et les versions ultérieures.

JET_errTermInProgress

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session est en cours d’arrêt.

JET_errTransReadOnly

La session doit disposer des autorisations d’écriture pour acquérir un verrou d’écriture.

JET_errWriteConflict

Erreur retournée lorsqu’un verrou en conflit est demandé.

En cas de réussite, la session a acquis le verrou demandé.

En cas d’échec, la session n’a pas acquis le verrou demandé.

Notes

Les verrous d’écriture ne peuvent pas être acquis avec des sessions ou des curseurs qui disposent d’autorisations en lecture seule, même si la session et le curseur n’effectuent finalement pas d’opération de mise à jour. La session et le curseur doivent avoir des privilèges d’écriture pour pouvoir acquérir un verrou d’écriture.

Les verrous de lecture et d’écriture sont un moyen de verrouillage pessimiste. Le verrouillage pessimiste s’attend à ce que plusieurs sessions simultanées entrent en conflit et acquièrent des verrous à l’avance pour garantir la réussite de leurs opérations.

La plupart des opérations seront sérialisables en vertu de verrous implicitement pris. Toutefois, certaines opérations ne le feront pas. Pour illustrer cela, considérez les deux transactions,

T1 : R(A), U(B)

T2 : R(B), U(A)

Le contrôle de version au niveau de l’enregistrement garantit que chaque transaction, lorsqu’elle est exécutée simultanément, voit les valeurs d’origine pour A et B. Il n’existe aucun ordre d’exécution série susceptible de produire les mêmes résultats pour A et B dans le cas où les résultats dépendent des données lues. Pour que l’application rende cette transaction sérialisable, elle doit acquérir un verrou de lecture explicite sur A et B dans chaque transaction lorsque la valeur est lue.

Spécifications

Condition requise Valeur

Client

Nécessite Windows Vista, Windows XP ou Windows 2000 Professionnel.

Serveur

Nécessite Windows Server 2008, Windows Server 2003 ou Windows 2000 Server.

En-tête

Déclaré dans Esent.h.

Bibliothèque

Utilisez ESENT.lib.

DLL

Nécessite ESENT.dll.

Voir aussi

JET_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate