API файловой базы геоданных .NET Wrapper: Как определить, заблокирован ли класс таблиц / пространственных объектов?


10

Я использую файл GDB API .NET-упаковщик, и он вполне соответствует моим потребностям (по сравнению с использованием ArcObjects). Одна из вещей, которые мне еще предстоит выяснить, - есть ли правильный способ определить, заблокирована ли таблица или класс пространственных объектов (fc) перед попыткой записи в нее.

Что я делал, так это оборачивал обновление / вставку в try / catch, и если я получаю «не могу получить исключение блокировки ...», я знаю, что объект заблокирован чем-то другим.

Я пропускаю лучший способ определить, можно ли записать данную таблицу или fc?


Мне также будет интересен ответ на этот вопрос не только для API файловой базы геоданных, но в идеале и для ArcObjects.
Stakx

Поскольку это два совершенно разных API, я бы предложил задать отдельный вопрос. Я не уверен, что награду можно перенести, хотя.
blah238

Я согласен с @ blah238. Ответ для ArcObjects заключается в использовании ISchemaLockInfo & ISchemaLock для предоставления информации о блокировке схемы; Я думаю, что нет никакого ответа для API
Filegeodatbase

2
Блокировка не открывается через API файловой базы геоданных. Вам нужно будет попытаться либо написать, либо получить блокировку записи, и иметь дело с исключением.
Трэвис

2
Вы пробовали Esri :: FileGDB :: Table :: IsEditable?
Кирк Куйкендалл

Ответы:


1

Я не думаю, что в API файловой базы геоданных есть зацепка для этого явно. Но вы можете использовать обходной путь, проверив файловую систему на наличие файла "..sr.lock", как упомянуто выше.

Файловые базы геоданных читаются как папки в файловой системе, и будет один из этих файлов для каждого пользовательского компьютера, который имеет активное (или неопределенное ...) соединение с файловой базой геоданных (одна в таблице _gdb) и / или любой функцией классы, к которым они в настоящее время подключены.

Это быстрее, чем ждать возврата ошибки при сбое доступа. Ответ MattB выше с приборной панелью блокировки - отличная идея для нескольких пользователей.


0

Я использую ArcObjects и использовал метод try / catch, который вы упомянули.

В моем случае более одного пользователя должны читать и записывать данные в одном классе пространственных объектов в базе геоданных. У меня появляется «экран загрузки», который позволяет пользователю узнать, что данные используются, а затем цикл повторяется каждые несколько секунд в фоновом режиме, пока для них не будет создана блокировка.

Другой способ использования замков описан ниже. Я знаю, что мое использование этого метода просмотра файлов блокировки отличается от того, что вы хотите сделать, но концепция та же самая, и вы можете использовать нечто подобное, если вам нужно определить тип блокировки или кому принадлежит блокировка. , Вот информация, если вы заинтересованы.

Поскольку вы можете видеть конкретные файлы блокировок, кому они принадлежат, к какому типу блокировок они относятся и т. Д., Если вы загляните в базу геоданных в проводнике Windows, это создаст отдельное приложение «статус», которое отслеживает файлы блокировок определенного класс объектов мы все используем.

Используя этот метод, я в режиме реального времени могу видеть с удобной для чтения приборной панели, у кого заблокирован этот класс объектов (в зависимости от имени компьютера), и какой тип блокировки у них есть. Например, если он видит блокировку "sr" (схема), я знаю, что к его оглавлению добавлен класс пространственных объектов, блокировка "rd" означает, что они читают из класса пространственных объектов, блокировка "wr" означает, что они пишут data и блокировка "ed" означают, что у них открыт сеанс редактирования в классе объектов.

Это очень полезно при выполнении технического обслуживания, чтобы можно было смотреть вниз и быть уверенным, что оно ни на кого не повлияет. Запись «Неизвестно» также предупреждает меня, когда кто-то неожиданно использует класс объектов, и я могу продолжить расследование.

Вот снимок экрана приборной панели, которую я использую. Панель состояния StatusClass

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.