Compartir a través de


Función JetGetLock

Se aplica a: Windows | Windows Server

Función JetGetLock

La función JetGetLock proporciona un medio para reservar explícitamente la capacidad de actualizar una fila, escribir bloqueo o impedir explícitamente que cualquier otra sesión actualice una fila. Normalmente, los bloqueos de escritura de fila se adquieren implícitamente como resultado de la actualización de filas. Normalmente, los bloqueos de lectura no son necesarios debido al control de versiones de registros. Sin embargo, en algunos casos, una transacción puede querer bloquear explícitamente una fila para aplicar la serialización, o para asegurarse de que una operación posterior se realizará correctamente en virtud de que ya se han tomado bloqueos necesarios.

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

Parámetros

sesid

Sesión que se usará para esta llamada.

tableid

Cursor que se usará para esta llamada.

grbit

Un grupo de bits que contienen las opciones que se usarán para esta llamada, que incluyen cero o más de lo siguiente:

Valor

Significado

JET_bitReadLock

Esta marca hace que se adquiera un bloqueo de lectura en el registro actual. Los bloqueos de lectura no son compatibles con los bloqueos de escritura que ya mantienen otras sesiones, pero son compatibles con bloqueos de lectura mantenidos por otras sesiones.

JET_bitWriteLock

Esta marca hace que se adquiera un bloqueo de escritura en el registro actual. Los bloqueos de escritura no son compatibles con los bloqueos de escritura o lectura mantenidos por otras sesiones, pero son compatibles con los bloqueos de lectura mantenidos por la misma sesión.

Valor devuelto

Esta función devuelve el tipo de datos JET_ERR con uno de los siguientes códigos de retorno. Para obtener más información sobre los posibles errores de ESE, vea Extensible Storage Engine Errors and Error Handling Parameters.

Código devuelto

Descripción

JET_errSuccess

La operación se ha completado correctamente.

JET_errClientRequestToStopJetService

No es posible completar la operación porque toda la actividad de la instancia asociada a la sesión ha dejado de funcionar como resultado de una llamada a JetStopService.

JET_errInstanceUnavailable

No es posible completar la operación porque la instancia asociada a la sesión ha encontrado un error irrecuperable que requiere que se revoque el acceso a todos los datos para proteger la integridad de esos datos. Windows XP solo devolverá este error y versiones posteriores.

JET_errInvalidgrbit

El grbit dado no es JET_bitReadLock ni JET_bitWriteLock. Debe ser una de estas dos marcas.

JET_errNoCurrentRecord

El cursor debe estar en un registro para adquirir un bloqueo. Los bloqueos siempre están en registros.

JET_errNotInitialized

No es posible completar la operación porque la instancia asociada a la sesión aún no se ha inicializado.

JET_errNotInTransaction

Las sesiones de una transacción solo pueden adquirir bloqueos.

JET_errPermissionDenied

El cursor no puede ser de solo lectura y adquirir un bloqueo de escritura.

JET_errRestoreInProgress

No es posible completar la operación porque hay una operación de restauración en curso en la instancia asociada a la sesión.

JET_errSessionSharingViolation

No se puede usar la misma sesión para más de un subproceso al mismo tiempo. Windows XP solo devolverá este error y versiones posteriores.

JET_errTermInProgress

No es posible completar la operación porque se está cerrando la instancia asociada a la sesión.

JET_errTransReadOnly

La sesión debe tener permisos de escritura para adquirir el bloqueo de escritura.

JET_errWriteConflict

Error devuelto cuando se solicita un bloqueo en conflicto.

Si se ejecuta correctamente, la sesión ha adquirido el bloqueo solicitado.

En caso de error, la sesión no ha adquirido el bloqueo solicitado.

Observaciones

Los bloqueos de escritura no se pueden adquirir con sesiones o cursores que tengan permisos de solo lectura, incluso si la sesión y el cursor en última instancia no realizan una operación de actualización. Tanto la sesión como el cursor deben tener privilegios de escritura para adquirir un bloqueo de escritura.

Los bloqueos de lectura y escritura son un medio de bloqueo pesimista. El bloqueo pesimista espera que varias sesiones simultáneas entren en conflicto y adquieran bloqueos de antemano para asegurarse de que sus operaciones se realicen correctamente.

La mayoría de las operaciones se serializarán en virtud de bloqueos tomados implícitamente. Sin embargo, algunas operaciones no. Para ilustrar esto, tenga en cuenta las dos transacciones,

T1 : R(A), U(B)

T2 : R(B), U(A)

El control de versiones de nivel de registro garantizará que cada transacción cuando se ejecute simultáneamente verá los valores originales de A y B. No hay ningún orden de serie de ejecución que pueda generar los mismos resultados para A y B en el caso de que los resultados dependan de los datos leídos. Para que la aplicación pueda serializar esta transacción, debe adquirir un bloqueo de lectura explícito en A y B en cada transacción cuando se lee el valor.

Requisitos

Requisito Value

Cliente

Requiere Windows Vista, Windows XP o Windows 2000 Professional.

Servidor

Requiere Windows Server 2008, Windows Server 2003 o Windows 2000 Server.

Encabezado

Declarado en Esent.h.

Library

Use ESENT.lib.

Archivo DLL

Requiere ESENT.dll.

Consulte también

JET_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate