Dosya Geodatabase API .NET Sarıcı: Tablo / Özellik Sınıfının Kilitli olup olmadığını nasıl belirleyebilirim?


10

Dosya gdb API .NET sarıcı kullanıyorum ve oldukça güzel benim ihtiyaçlarına uygun (ArcObjects kullanarak). Henüz çözemediğim şeylerden biri, bir tablo veya özellik sınıfının (fc) yazmaya başlamadan önce kilitlenip kilitlenmediğini belirlemenin uygun bir yolu olup olmadığıdır.

Yaptığım şey bir try / catch'e bir güncelleme / insert sarmaktır ve eğer 'kilit istisnası elde edemezsem ...', nesnenin başka bir şey tarafından kilitlendiğini biliyorum.

Belirli bir tablo veya fc'nin yazılabileceğini anlamanın daha iyi bir yolunu kaçırıyor muyum?


Ben de sadece Dosya Geodatabase API için değil, aynı zamanda ideal olarak ArcObjects için bu sorunun cevabını da ilgilendirir.
stakx

Tamamen farklı iki API olduğu için ayrı bir soru sormanızı öneririm. Ödülün taşınabileceğinden emin değilim.
blah238

@ Blah238 ile hemfikirim. ArcObjects için yanıt şema kilidi hakkında bilgi sağlamak için ISchemaLockInfo & ISchemaLock kullanmaktır; Sanırım Filegeodatbase API için bir cevap yok
Devdatta Tengshe

2
Kilitleme, dosya coğrafi veritabanı API'sı aracılığıyla gösterilmez. Yazmaya veya yazma kilidini almaya ve istisna ile başa çıkmaya çalışmanız gerekecektir.
travis

2
Esri :: FileGDB :: Table :: IsEditable'ı denediniz mi?
Kirk Kuykendall

Yanıtlar:


1

Bunun için geodatabase API dosyasında bir kanca olduğunu açıkça sanmıyorum. Ancak, dosya sistemini yukarıda belirtildiği gibi bir "..sr.lock" dosyasının olup olmadığını denetleyerek geçici bir çözüm kullanabilirsiniz.

Dosya coğrafi veritabanları, dosya sistemindeki klasörler gibi okunur ve dosya coğrafi veritabanına (_gdb tablosunda bir tane) ve / veya herhangi bir özelliğe etkin (veya sonlandırılmamış ...) bağlantıya sahip her kullanıcı makinesi için bu dosyalardan biri olacaktır. bağlı oldukları sınıflar.

Bir erişim arızasından bir hatanın geri dönmesini beklemekten daha hızlıdır. MattB'nin yukarıdaki kilit gösterge tablosuyla yanıtı, birden fazla kullanıcı için harika bir fikirdir.


0

ArcObjects kullanıyorum ve bahsettiğiniz try / catch yöntemini kullandım.

Benim durumumda, birden fazla kullanıcının bir coğrafi veritabanındaki aynı özellik sınıfındaki verileri okuması ve yazması gerekiyor. Ben geliyor ve kullanıcı veri kullanımda olduğunu bilmek sağlar bir yük ekranı var ve daha sonra bir döngü onlar için bir kilit oluşturulabilene kadar arka planda birkaç saniyede bir denemeye devam ediyor.

Kilitler kullanmanın diğer yolu aşağıda açıklanmıştır. Kilit dosyalarına bakmanın bu yöntemini kullanmamın yapmak istediğiniz şeyden farklı olduğunu biliyorum, ancak konsept aynı ve kilit türünü veya kilidin kime ait olduğunu belirlemeniz gerekiyorsa benzer bir şey kullanabilirsiniz. . İlgileniyorsanız bilgi aşağıdadır.

Windows Gezgini'nde coğrafi veritabanının içine bakarsanız, belirli kilit dosyalarını, kime ait olduklarını, hangi kilit türlerini vb. Görebildiğinizden, belirli kilit dosyalarını izleyen bağımsız bir "durum" uygulaması oluşturmaktır. hepimizin kullandığı özellik sınıfı.

Bu yöntemi kullanarak, bu özellik sınıfı kilitli olan (bilgisayar adına göre) ve ne tür bir kilide sahip olan, okunması kolay bir kontrol panelinden gerçek zamanlı olarak görebiliyorum. Örneğin, bir "sr" (şema) kilidi görürse İçindekiler tablosuna özellik sınıfı eklediklerini biliyorum, "rd" kilidi özellik sınıfından okudukları anlamına gelir, "wr" kilidi yazdıkları anlamına gelir veriler ve "ed" kilidi özellik sınıfında bir düzenleme oturumu açmaları anlamına gelir.

Bu, bakım yaparken aşağı bakabilmek ve kimseyi olumsuz etkilemeyeceğinden emin olmak için çok yararlıdır. "Bilinmeyen" girişi de beklenmedik biri özellik sınıfını kullanırken beni uyarır ve daha fazla araştırma yapabilirsiniz.

İşte kullandığım gösterge panosunun ekran görüntüsü. FeatureClass Durum Gösterge Tablosu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.