Eu tenho usado o wrapper .NET da API do arquivo gdb e ele atendeu bem às minhas necessidades (em comparação ao ArcObjects). Uma das coisas que ainda preciso descobrir é se existe uma maneira adequada de determinar se uma tabela ou classe de recurso (fc) está bloqueada antes de tentar escrever nela.
O que tenho feito é agrupar uma atualização / inserção em uma tentativa / captura, e se eu conseguir 'não pode adquirir exceção de bloqueio ...', sei que o objeto está bloqueado por outra coisa.
Estou perdendo uma maneira melhor de saber se uma determinada tabela ou fc pode ser gravada?
.net
file-geodatabase-api
user890
fonte
fonte
Respostas:
Eu não acho que exista um gancho na API de geodatabase do arquivo explicitamente. Mas você pode usar uma solução alternativa, verificando o sistema de arquivos quanto à presença de um arquivo "..sr.lock", conforme mencionado acima.
Os bancos de dados geográficos de arquivos são lidos como pastas no sistema de arquivos e haverá um desses arquivos para cada máquina do usuário que possui uma conexão ativa (ou não terminada ...) com o banco de dados geográfico do arquivo (um na tabela _gdb) e / ou qualquer recurso classes às quais eles estão conectados no momento.
É mais rápido do que esperar que um erro retorne de uma falha de acesso. A resposta de MattB acima com o painel de bloqueio é uma ótima idéia para vários usuários.
fonte
Eu uso o ArcObjects e usei o método try / catch que você mencionou.
No meu caso, mais de um usuário precisa ler e gravar dados na mesma classe de recurso em um geodatabase. Eu tenho uma "tela de carregamento" que aparece e permite que o usuário saiba que os dados estão em uso e, em seguida, um loop continua tentando a cada poucos segundos em segundo plano até que um bloqueio possa ser criado para eles.
A outra maneira que usei bloqueios é descrita abaixo. Sei que meu uso desse método de visualização de arquivos de bloqueio difere do que você deseja fazer, mas o conceito é o mesmo e você pode usar algo semelhante se precisar determinar o tipo de bloqueio ou a quem o bloqueio pertence. . Aqui está a informação, se você estiver interessado.
Como você pode ver os arquivos de bloqueio específicos, a quem eles pertencem, a que tipo de bloqueio são etc., se você olhar dentro do geodatabase no Windows Explorer, criará um aplicativo de "status" independente que monitora os arquivos de bloqueio dos arquivos específicos. classe de recurso que todos nós usamos.
Usando esse método, eu posso ver em tempo real, em um painel de fácil leitura, quem tem essa classe de recursos bloqueada (com base no nome do computador) e que tipo de bloqueio eles têm. Por exemplo, se ele vir um bloqueio "sr" (esquema), eu sei que eles têm a classe de recurso adicionada ao seu Índice, um bloqueio "rd" significa que eles estão lendo a classe de recurso, um bloqueio "wr" significa que eles estão escrevendo dados e um bloqueio "ed" significa que eles têm uma sessão de edição aberta na classe de recurso.
Isso é muito útil ao realizar a manutenção para poder olhar para baixo e garantir que isso não terá um efeito negativo em ninguém. A entrada "Desconhecido" também me alerta quando alguém inesperado está usando a classe de recurso e eu posso investigar mais.
Aqui está uma captura de tela do painel de instrumentos que eu uso.
fonte