Plik Geodatabase API .NET Wrapper: Jak ustalić, czy tabela / klasa elementów jest zablokowana?

10

Korzystam z pliku gdb API .NET wrapper, który całkiem dobrze odpowiada moim potrzebom (w porównaniu z ArcObjects). Jedną z rzeczy, które muszę jeszcze ustalić, jest to, czy istnieje właściwy sposób, aby ustalić, czy tabela lub klasa funkcji (fc) jest zablokowana przed przystąpieniem do zapisu.

To, co robiłem, to pakowanie aktualizacji / wkładki w try / catch, a jeśli dojdę do „nie mogę uzyskać wyjątku blokady ...”, wiem, że obiekt jest zablokowany przez coś innego.

Czy brakuje mi lepszego sposobu na stwierdzenie, czy dana tabela lub fc można zapisać?

użytkownik890
źródło
Byłbym również zainteresowany odpowiedzią na to pytanie, nie tylko dla interfejsu API Geobazy API, ale idealnie również dla ArcObjects.
stakx
Ponieważ są to dwa zupełnie różne interfejsy API, proponuję zadać osobne pytanie. Nie jestem jednak pewien, czy nagrodę można przenieść.
blah238
Zgadzam się z @ blah238. Odpowiedzią ArcObjects jest użycie ISchemaLockInfo i ISchemaLock w celu dostarczenia informacji o blokadzie schematu; Myślę, że nie ma odpowiedzi na API
Filegeodatbase
2
Blokowanie nie jest ujawniane przez interfejs API geobazy danych pliku. Będziesz musiał spróbować zapisać lub uzyskać blokadę zapisu i poradzić sobie z wyjątkiem.
travis,
2
Czy próbowałeś Esri :: FileGDB :: Table :: IsEditable?
Kirk Kuykendall

Odpowiedzi:

1

Nie sądzę, że istnieje haczyk w interfejsie API geobazy danych do tego jawnie. Możesz jednak skorzystać z obejścia, sprawdzając system plików pod kątem obecności pliku „..sr.lock”, jak wspomniano powyżej.

Geobazy plików są odczytywane jak foldery w systemie plików i będzie jeden z tych plików dla każdego komputera użytkownika, który ma aktywne (lub nieokreślone ...) połączenie z geobazą pliku (jednym w tabeli _gdb) i / lub dowolną funkcją klasy, z którymi są obecnie połączone.

Jest szybszy niż oczekiwanie na powrót błędu po awarii dostępu. Powyższa odpowiedź MattB z pulpitem blokady jest świetnym pomysłem dla wielu użytkowników.

kingmi
źródło
0

Korzystam z ArcObjects i użyłem metody try / catch, o której wspomniałeś.

W moim przypadku więcej niż jeden użytkownik musi czytać i zapisywać dane w tej samej klasie obiektów w geobazie. Mam „ekran ładowania”, który pojawia się i informuje użytkownika, że ​​dane są w użyciu, a następnie pętla próbuje co kilka sekund w tle, aż można dla nich utworzyć blokadę.

Inny sposób korzystania z zamków opisano poniżej. Wiem, że moja metoda patrzenia na pliki bloków różni się od tego, co chcesz zrobić, ale koncepcja jest taka sama i możesz użyć czegoś podobnego, jeśli chcesz określić typ blokady lub do kogo należy zamek . Oto informacje, jeśli jesteś zainteresowany.

Ponieważ możesz zobaczyć określone pliki blokad, do kogo należą, jakiego rodzaju są blokady itp., Jeśli zajrzysz do geobazy w Eksploratorze Windows, utworzysz autonomiczną aplikację „statusową”, która monitoruje pliki blokad określonych klasa funkcji, której wszyscy używamy.

Korzystając z tej metody, mogę zobaczyć w czasie rzeczywistym z łatwego do odczytania pulpitu nawigacyjnego, który ma zablokowaną klasę funkcji (na podstawie nazwy komputera) i jaki typ blokady mają. Na przykład, jeśli widzi blokadę „sr” (schemat), wiem, że dodała klasę funkcji do spisu treści, blokada „rd” oznacza, że ​​czytają z klasy funkcji, blokada „wr” oznacza, że ​​piszą dane i blokada „ed” oznaczają, że mają otwartą sesję edycji w klasie elementów.

Jest to bardzo pomocne podczas wykonywania konserwacji, aby móc zerknąć w dół i upewnić się, że nie będzie to miało negatywnego wpływu na nikogo. Wpis „Nieznany” ostrzega mnie również, gdy ktoś nieoczekiwany korzysta z klasy funkcji i mogę dalej badać.

Oto zrzut ekranu deski rozdzielczej, której używam. Panel stanu FeatureClass

MattB
źródło