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