File Geodatabase API .NET Wrapper: ¿Cómo determinar si la Tabla / Clase de entidad está bloqueada?

10

He estado usando el archivo gdb API .NET wrapper, y se ha adaptado bastante bien a mis necesidades (en comparación con el uso de ArcObjects). Una de las cosas que aún tengo que descubrir es si hay una manera adecuada de determinar si una tabla o clase de entidad (fc) está bloqueada antes de intentar escribir en ella.

Lo que he estado haciendo es envolver una actualización / inserción en un intento / captura, y si llego a 'no puedo adquirir la excepción de bloqueo ...', sé que el objeto está bloqueado por otra cosa.

¿Me estoy perdiendo una mejor manera de saber si se puede escribir en una tabla o FC?

usuario890
fuente
También me interesaría una respuesta a esta pregunta, no solo para la API de geodatabase de archivos, sino idealmente para ArcObjects.
stakx
Como son dos API completamente diferentes, sugeriría hacer una pregunta por separado. Sin embargo, no estoy seguro de si la recompensa podría ser trasladada.
blah238
Estoy de acuerdo con @ blah238. La respuesta para ArcObjects es utilizar ISchemaLockInfo e ISchemaLock para proporcionar información sobre un bloqueo de esquema; Creo que no hay respuesta para la API
Filegeodatbase
2
El bloqueo no está expuesto a través de la API de geodatabase de archivos. Tendrá que intentar escribir u obtener el bloqueo de escritura y lidiar con la excepción.
travis
2
¿Intentaste con Esri :: FileGDB :: Table :: IsEditable?
Kirk Kuykendall

Respuestas:

1

No creo que haya un enlace en la API de geodatabase de archivos para esto explícitamente. Pero puede usar una solución alternativa verificando en el sistema de archivos la presencia de un archivo "..sr.lock" como se mencionó anteriormente.

Las geodatabases de archivos se leen como carpetas en el sistema de archivos y habrá uno de estos archivos para cada máquina de usuario que tenga una conexión activa (o no terminada ...) a la geodatabase de archivos (una en la tabla _gdb) y / o cualquier función clases a las que están conectados actualmente.

Es más rápido que esperar que regrese un error de una falla de acceso. La respuesta anterior de MattB con el panel de bloqueo es una gran idea para múltiples usuarios.

kingmi
fuente
0

Yo uso ArcObjects y he usado el método try / catch que mencionaste.

En mi caso, más de un usuario necesita leer y escribir datos en la misma clase de entidad en una geodatabase. Tengo una "pantalla de carga" que aparece y le informa al usuario que los datos están en uso y luego un bucle sigue intentando cada pocos segundos en segundo plano hasta que se pueda crear un bloqueo para ellos.

La otra forma en que he usado bloqueos se describe a continuación. Sé que mi uso de este método para ver los archivos de bloqueo difiere de lo que desea hacer, pero el concepto es el mismo y puede usar algo similar si necesita determinar el tipo de bloqueo o a quién pertenece el bloqueo . Aquí está la información si está interesado.

Como puede ver los archivos de bloqueo específicos, a quién pertenecen, qué tipo de bloqueo son, etc., si mira dentro de la geodatabase en el Explorador de Windows, se crea una aplicación de "estado" independiente que monitorea los archivos de bloqueo de cada clase de entidad que todos usamos.

Utilizando este método, puedo ver en tiempo real desde un panel de control fácil de leer quién tiene esa clase de entidad bloqueada (según el nombre de la computadora) y qué tipo de bloqueo tienen. Por ejemplo, si ve un bloqueo "sr" (esquema), sé que tienen la clase de entidad agregada a su Tabla de contenido, un bloqueo "rd" significa que están leyendo desde la clase de entidad, un bloqueo "wr" significa que están escribiendo datos y un bloqueo "ed" significa que tienen una sesión de edición abierta en la clase de entidad.

Esto es muy útil cuando se realiza el mantenimiento para poder mirar hacia abajo y asegurarse de que no tendrá un efecto negativo en nadie. La entrada "Desconocido" también me alerta cuando alguien inesperado está usando la clase de entidad y puedo investigar más a fondo.

Aquí hay una captura de pantalla del tablero que uso. Panel de estado de FeatureClass

MattB
fuente