Função JetGetLock
Aplica-se a: Windows | Windows Server
Função JetGetLock
A função JetGetLock fornece um meio de reservar explicitamente a capacidade de atualizar uma linha, um bloqueio de gravação ou impedir explicitamente que uma linha seja atualizada por qualquer outra sessão, o bloqueio de leitura. Normalmente, os bloqueios de gravação de linha são adquiridos implicitamente como resultado da atualização de linhas. Bloqueios de leitura geralmente não são necessários devido ao controle de versão do registro. No entanto, em alguns casos, uma transação pode desejar bloquear explicitamente uma linha para impor a serialização ou garantir que uma operação subsequente seja bem-sucedida em virtude de que os bloqueios necessários já foram feitos.
JET_ERR JET_API JetGetLock(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in JET_GRBIT grbit
);
Parâmetros
sesid
A sessão que será usada para essa chamada.
Tableid
O cursor que será usado para essa chamada.
grbit
Um grupo de bits que contém as opções a serem usadas para essa chamada, que incluem zero ou mais dos seguintes:
Valor |
Significado |
---|---|
JET_bitReadLock |
Esse sinalizador faz com que um bloqueio de leitura seja adquirido no registro atual. Bloqueios de leitura são incompatíveis com bloqueios de gravação já mantidos por outras sessões, mas são compatíveis com bloqueios de leitura mantidos por outras sessões. |
JET_bitWriteLock |
Esse sinalizador faz com que um bloqueio de gravação seja adquirido no registro atual. Os bloqueios de gravação não são compatíveis com bloqueios de gravação ou leitura mantidos por outras sessões, mas são compatíveis com bloqueios de leitura mantidos pela mesma sessão. |
Valor Retornado
Essa função retorna o tipo de dados JET_ERR com um dos seguintes códigos de retorno. Para obter mais informações sobre os possíveis erros de ESE, consulte Erros extensíveis do mecanismo de armazenamento e parâmetros de tratamento de erros.
Código de retorno |
Descrição |
---|---|
JET_errSuccess |
A operação foi concluída com sucesso. |
JET_errClientRequestToStopJetService |
Não é possível concluir a operação porque todas as atividades na instância associada à sessão cessaram como resultado de uma chamada para JetStopService. |
JET_errInstanceUnavailable |
Não é possível concluir a operação porque a instância associada à sessão encontrou um erro fatal que exige que o acesso a todos os dados seja revogado para proteger a integridade desses dados. Esse erro só será retornado pelo Windows XP e versões posteriores. |
JET_errInvalidgrbit |
O grbit determinado não é JET_bitReadLock nem JET_bitWriteLock. Deve ser um desses dois sinalizadores. |
JET_errNoCurrentRecord |
O cursor deve estar em um registro para adquirir um bloqueio. Os bloqueios estão sempre em registros. |
JET_errNotInitialized |
Não é possível concluir a operação porque a instância associada à sessão ainda não foi inicializada. |
JET_errNotInTransaction |
Os bloqueios só podem ser adquiridos por sessões em uma transação. |
JET_errPermissionDenied |
O cursor não pode ser somente leitura e adquirir um bloqueio de gravação. |
JET_errRestoreInProgress |
Não é possível concluir a operação porque uma operação de restauração está em andamento na instância associada à sessão. |
JET_errSessionSharingViolation |
A mesma sessão não pode ser usada para mais de um thread ao mesmo tempo. Esse erro só será retornado pelo Windows XP e versões posteriores. |
JET_errTermInProgress |
Não é possível concluir a operação porque a instância associada à sessão está sendo desligada. |
JET_errTransReadOnly |
A sessão deve ter permissões de gravação para adquirir o bloqueio de gravação. |
JET_errWriteConflict |
O erro retornado quando um bloqueio conflitante é solicitado. |
Em caso de êxito, a sessão adquiriu o bloqueio solicitado.
Em caso de falha, a sessão não adquiriu o bloqueio solicitado.
Comentários
Bloqueios de gravação não podem ser adquiridos com sessões ou cursores que tenham permissões somente leitura, mesmo que a sessão e o cursor não executem uma operação de atualização. A sessão e o cursor devem ter privilégios de gravação para adquirir um bloqueio de gravação.
Bloqueios de leitura e gravação são um meio de bloqueio pessimista. O bloqueio pessimista espera que várias sessões simultâneas entrem em conflito e adquiram bloqueios com antecedência para garantir que suas operações sejam bem-sucedidas.
A maioria das operações será serializável em virtude de bloqueios implicitamente tomados. No entanto, algumas operações não. Para ilustrar isso, considere as duas transações,
T1: R(A), U(B)
T2: R(B), U(A)
O controle de versão no nível do registro garantirá que cada transação quando executada simultaneamente verá os valores originais de A e B. Não há nenhuma ordem serial de execução que possa produzir os mesmos resultados para A e B no caso de os resultados dependerem da leitura dos dados. Para que o aplicativo torne essa transação serializável, ele deve adquirir um bloqueio de leitura explícito em A e B em cada transação quando o valor é lido.
Requisitos
Requisito | Valor |
---|---|
Cliente |
Requer Windows Vista, Windows XP ou Windows 2000 Professional. |
Servidor |
Requer o Windows Server 2008, o Windows Server 2003 ou o Windows 2000 Server. |
Cabeçalho |
Declarado em Esent.h. |
Biblioteca |
Use ESENT.lib. |
DLL |
Requer ESENT.dll. |
Consulte Também
JET_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate