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