我一直在使用文件gdb API .NET包装器,它非常适合我的需求(与使用ArcObjects相比)。我要弄清楚的一件事是,是否存在一种适当的方法来确定表或要素类(fc)是否在尝试写入表之前被锁定。
我一直在做的是在try / catch中包装一个更新/插入,如果我无法获取锁异常...,我知道该对象被其他东西锁住了。
我是否缺少一种更好的方法来判断给定的表或fc是否可以写入?
我一直在使用文件gdb API .NET包装器,它非常适合我的需求(与使用ArcObjects相比)。我要弄清楚的一件事是,是否存在一种适当的方法来确定表或要素类(fc)是否在尝试写入表之前被锁定。
我一直在做的是在try / catch中包装一个更新/插入,如果我无法获取锁异常...,我知道该对象被其他东西锁住了。
我是否缺少一种更好的方法来判断给定的表或fc是否可以写入?
Answers:
我使用ArcObjects,并使用了您提到的try / catch方法。
以我为例,多个用户需要在地理数据库的同一要素类中读写数据。我出现一个“加载屏幕”,让用户知道数据正在使用中,然后循环不断在后台每隔几秒钟尝试一次,直到能够为其创建锁为止。
下面介绍了我使用锁的另一种方法。我知道我使用这种查看锁文件的方法与您要执行的操作不同,但是概念相同,如果您需要确定锁的类型或锁属于谁,则可以使用类似的方法。如果您有兴趣,这是信息。
由于您可以看到特定的锁定文件,它们属于谁,它们属于哪种锁定类型,等等。如果您在Windows资源管理器中查看地理数据库,则可以创建一个独立的“状态”应用程序来监视特定的锁定文件我们都使用的要素类。
使用这种方法,我可以从易于阅读的仪表板上实时查看谁已锁定了该要素类(基于计算机名称)以及他们拥有哪种类型的锁。例如,如果看到“ sr”(模式)锁,我知道他们已将要素类添加到目录中,则“ rd”锁表示他们正在从要素类读取,“ wr”锁表示他们正在编写数据和“ ed”锁定意味着它们在要素类上打开了一个编辑会话。
这在执行维护时可以一览无余,并确保不会对任何人造成负面影响,这非常有用。“未知”条目还会提醒我,当有人意外使用要素类时,我可以进行进一步调查。
这是我使用的仪表板的屏幕截图。