文件地理数据库API .NET包装器:如何确定表/功能类是否已锁定?


10

我一直在使用文件gdb API .NET包装器,它非常适合我的需求(与使用ArcObjects相比)。我要弄清楚的一件事是,是否存在一种适当的方法来确定表或要素类(fc)是否在尝试写入表之前被锁定。

我一直在做的是在try / catch中包装一个更新/插入,如果我无法获取锁异常...,我知道该对象被其他东西锁住了。

我是否缺少一种更好的方法来判断给定的表或fc是否可以写入?


我还将对这个问题的答案感兴趣,不仅是针对文件地理数据库API,而且理想情况下还针对ArcObjects。
stakx

由于它们是两个完全不同的API,因此建议您提出一个单独的问题。我不确定赏金是否可以转移。
blah238

我同意@ blah238。ArcObjects的答案是使用ISchemaLockInfo和ISchemaLock提供有关模式锁的信息。我认为Filegeodatbase API没有答案
Devdatta Tengshe 2013年

2
锁定不会通过文件地理数据库API公开。您将不得不尝试写入或获得写入锁定,然后处理异常。
travis

2
您是否尝试过Esri :: FileGDB :: Table :: IsEditable吗?
Kirk Kuykendall

Answers:


1

我认为文件地理数据库API中没有明确为此的钩子。但是您可以使用一种解决方法,方法是如上所述检查文件系统中是否存在“ ..sr.lock”文件。

文件地理数据库的读取就像文件系统上的文件夹一样,对于与文件地理数据库(在_gdb表中一个)和/或任何功能具有活动(或未终止...)连接的每台用户计算机,将有一个文件。他们当前连接到的类。

它比等待错误从访问失败返回更快。MattB上面关于锁定仪表板的答案对于多个用户来说是个好主意。


0

我使用ArcObjects,并使用了您提到的try / catch方法。

以我为例,多个用户需要在地理数据库的同一要素类中读写数据。我出现一个“加载屏幕”,让用户知道数据正在使用中,然后循环不断在后台每隔几秒钟尝试一次,直到能够为其创建锁为止。

下面介绍了我使用锁的另一种方法。我知道我使用这种查看锁文件的方法与您要执行的操作不同,但是概念相同,如果您需要确定锁的类型或锁属于谁,则可以使用类似的方法。如果您有兴趣,这是信息。

由于您可以看到特定的锁定文件,它们属于谁,它们属于哪种锁定类型,等等。如果您在Windows资源管理器中查看地理数据库,则可以创建一个独立的“状态”应用程序来监视特定的锁定文件我们都使用的要素类。

使用这种方法,我可以从易于阅读的仪表板上实时查看谁已锁定了该要素类(基于计算机名称)以及他们拥有哪种类型的锁。例如,如果看到“ sr”(模式)锁,我知道他们已将要素类添加到目录中,则“ rd”锁表示他们正在从要素类读取,“ wr”锁表示他们正在编写数据和“ ed”锁定意味着它们在要素类上打开了一个编辑会话。

这在执行维护时可以一览无余,并确保不会对任何人造成负面影响,这非常有用。“未知”条目还会提醒我,当有人意外使用要素类时,我可以进行进一步调查。

这是我使用的仪表板的屏幕截图。 FeatureClass状态仪表板

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.