ไฟล์ Geodatabase API. NET Wrapper: วิธีการตรวจสอบว่าตาราง / คุณสมบัติชั้นถูกล็อค?


10

ฉันใช้ไฟล์ gdb API .NET wrapper แล้วและมันก็เหมาะสมกับความต้องการของฉันอย่างมาก (เทียบกับการใช้ ArcObjects) สิ่งหนึ่งที่ฉันยังไม่ได้คิดก็คือถ้ามีวิธีที่เหมาะสมในการพิจารณาว่าตารางหรือฟีเจอร์คลาส (fc) ถูกล็อคไว้ก่อนที่จะพยายามเขียนลงไปหรือไม่

สิ่งที่ฉันได้ทำคือการห่อ update / insert ในลอง / catch และถ้าฉัน 'ไม่สามารถรับข้อยกเว้นล็อค ... ' ฉันรู้ว่าวัตถุถูกล็อคอย่างอื่น

ฉันไม่มีวิธีที่ดีกว่าที่จะบอกได้ไหมว่าสามารถเขียนตารางหรือ fc ที่กำหนดให้ได้หรือไม่


ฉันยังสนใจที่จะตอบคำถามนี้ไม่เพียง แต่สำหรับ File Geodatabase API แต่ยังเหมาะสำหรับ ArcObjects ด้วย
stakx

เนื่องจากเป็นสอง API ที่ต่างกันโดยสิ้นเชิงฉันขอแนะนำให้ถามคำถามแยกต่างหาก ฉันไม่แน่ใจว่าจะสามารถย้ายเงินรางวัลได้หรือไม่
blah238

ฉันเห็นด้วยกับ @ blah238 คำตอบสำหรับ ArcObjects คือการใช้ ISchemaLockInfo & ISchemaLock เพื่อให้ข้อมูลเกี่ยวกับล็อคสคีมา; ฉันคิดว่าไม่มีคำตอบสำหรับ API ของ
Filegeodatbase

2
การล็อคไม่ถูกเปิดเผยผ่านทาง geodatabase API ของไฟล์ คุณจะต้องพยายามเขียนหรือรับล็อกการเขียนและจัดการกับข้อยกเว้น
travis

2
คุณลอง Esri :: FileGDB :: Table :: IsEditable หรือไม่
Kirk Kuykendall

คำตอบ:


1

ฉันไม่คิดว่าจะมีตะขอใน API ไฟล์ฐานข้อมูลสำหรับเรื่องนี้อย่างชัดเจน แต่คุณสามารถใช้วิธีแก้ปัญหาได้โดยตรวจสอบระบบไฟล์ว่ามีไฟล์ "..sr.lock" ดังที่กล่าวไว้ข้างต้น

ฐานข้อมูลไฟล์ Geod จะอ่านเหมือนโฟลเดอร์ในระบบไฟล์และจะมีหนึ่งในไฟล์เหล่านี้สำหรับแต่ละเครื่องของผู้ใช้ที่มีการเชื่อมต่อ (หรือไม่ทำลาย ... ) การเชื่อมต่อกับฐานข้อมูลไฟล์ (หนึ่งในตาราง _gdb) และ / หรือคุณสมบัติใด ๆ คลาสที่พวกเขากำลังเชื่อมต่อกับ

มันเร็วกว่ารอข้อผิดพลาดในการส่งคืนจากความล้มเหลวในการเข้าถึง คำตอบของ MattB ด้านบนด้วยแดชบอร์ดล็อคเป็นความคิดที่ดีสำหรับผู้ใช้หลายคน


0

ฉันใช้ ArcObjects และใช้วิธีลอง / จับที่คุณกล่าวถึง

ในกรณีของฉันผู้ใช้มากกว่าหนึ่งคนต้องอ่านและเขียนข้อมูลในคลาสคุณลักษณะเดียวกันในฐานข้อมูลภูมิศาสตร์ ฉันมี "หน้าจอโหลด" ที่ปรากฏขึ้นและช่วยให้ผู้ใช้ทราบว่ามีการใช้ข้อมูลแล้ววนรอบจะพยายามทุก ๆ สองสามวินาทีในพื้นหลังจนกว่าจะสามารถสร้างล็อคได้

วิธีอื่น ๆ ที่ฉันใช้ล็อคมีอธิบายไว้ด้านล่าง ฉันรู้ว่าการใช้วิธีการดูไฟล์ล็อคของฉันแตกต่างจากสิ่งที่คุณต้องการทำ แต่แนวคิดนี้เหมือนกันและคุณสามารถใช้สิ่งที่คล้ายกันได้หากคุณต้องการกำหนดประเภทของล็อคหรือล็อคที่เป็นของใคร . นี่คือข้อมูลหากคุณสนใจ

เนื่องจากคุณสามารถดูไฟล์ล็อคเฉพาะของพวกเขาเป็นใครล็อคประเภทใด ฯลฯ หากคุณดูในฐานข้อมูลทางภูมิศาสตร์ใน Windows Explorer คือการสร้างแอปพลิเคชัน "สถานะ" แบบสแตนด์อโลนที่ตรวจสอบไฟล์ล็อคของเฉพาะ ฟีเจอร์คลาสที่เราทุกคนใช้

การใช้วิธีการนี้ฉันสามารถดูแบบเรียลไทม์จากแดชบอร์ดที่อ่านง่ายซึ่งล็อคคลาสคุณลักษณะนั้น (ตามชื่อคอมพิวเตอร์) และล็อคประเภทใด ตัวอย่างเช่นหากเห็นล็อค "sr" (schema) ฉันรู้ว่ามีฟีเจอร์คลาสที่เพิ่มเข้าไปในสารบัญของพวกเขาล็อค "rd" หมายความว่าพวกเขากำลังอ่านจากคลาสฟีเจอร์ล็อค "wr" หมายความว่าพวกเขากำลังเขียน data และการล็อก "ed" หมายความว่าพวกเขาเปิดเซสชันการแก้ไขในคลาสคุณลักษณะ

สิ่งนี้มีประโยชน์มากเมื่อทำการบำรุงรักษาเพื่อให้สามารถมองลงได้และทำให้แน่ใจว่าจะไม่ส่งผลเสียต่อใคร รายการ "ไม่ทราบ" ยังแจ้งเตือนฉันด้วยเมื่อมีคนไม่คาดคิดกำลังใช้งานคลาสคุณลักษณะและฉันสามารถตรวจสอบเพิ่มเติมได้

นี่คือภาพหน้าจอของแดชบอร์ดที่ฉันใช้ แผงควบคุมสถานะ FeatureClass

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.