फ़ाइल जियोडैटेबेस एपीआई .NET आवरण: यह निर्धारित करने के लिए कि टेबल / फ़ीचर क्लास लॉक है या नहीं?


10

मैं फ़ाइल gdb API .NET रैपर का उपयोग कर रहा हूं, और यह मेरी जरूरतों को काफी अच्छी तरह से अनुकूल कर दिया है (जैसे कि आर्कोबजेक्ट्स का उपयोग करके)। मेरे पास अभी तक यह पता लगाने के लिए एक चीज है कि क्या यह निर्धारित करने का एक उचित तरीका है कि कोई तालिका या सुविधा वर्ग (fc) उस पर लिखने का प्रयास करने से पहले बंद है या नहीं।

मैं जो भी कर रहा हूं वह अपडेट / इंसर्ट में लपेट रहा है / पकड़ रहा हूं, और अगर मुझे 'लॉक अपवाद हासिल नहीं किया जा सकता ...', मुझे पता है कि ऑब्जेक्ट कुछ और द्वारा लॉक किया गया है।

क्या मुझे यह बताने के लिए एक बेहतर तरीका याद आ रहा है कि क्या दी गई तालिका या एफसी को लिखा जा सकता है?


मैं इस सवाल के जवाब में भी दिलचस्पी लेना चाहूंगा, न केवल फाइल जियोडेटाबेस एपीआई के लिए, बल्कि आदर्श रूप से आर्कओबजेक्ट्स के लिए भी।
स्टॅक्स २ak'१३

चूंकि वे दो पूरी तरह से अलग एपीआई हैं, इसलिए मैं एक अलग सवाल पूछना चाहूंगा। मुझे यकीन नहीं है कि इनाम को हालांकि स्थानांतरित किया जा सकता है या नहीं।
blah238

मैं @ blah238 से सहमत हूं। आर्कोबजेक्ट्स के लिए उत्तर यह है कि स्कीमा लॉक के बारे में जानकारी प्रदान करने के लिए ISchemaLockInfo & ISchemaLock का उपयोग करें; मुझे लगता है कि फ़ाइलगोदतबेस एपीआई का कोई जवाब नहीं है
देवदत्त तेंगशे

2
फ़ाइल जियोडैटेबेस एपीआई के माध्यम से लॉकिंग को उजागर नहीं किया गया है। आपको लिखने का प्रयास करना होगा, या लेखन लॉक प्राप्त करना होगा, और अपवाद से निपटना होगा।
ट्रैविस

2
क्या आपने Esri :: FileGDB :: Table :: IsEditable की कोशिश की?
कर्क कूकेन्डल

जवाबों:


1

मुझे नहीं लगता कि इस के लिए स्पष्ट रूप से फ़ाइल जियोडैटेबेस एपीआई में एक हुक है। लेकिन आप ऊपर बताए अनुसार "..sr.lock" फ़ाइल की उपस्थिति के लिए फ़ाइल सिस्टम की जाँच करके वर्कअराउंड का उपयोग कर सकते हैं।

फाइल जियोडैट डेटाबेस फाइल सिस्टम पर फोल्डर की तरह पढ़े जाते हैं और प्रत्येक उपयोगकर्ता मशीन के लिए इनमें से एक फाइल होगी जिसमें फाइल जियोडैटबेस (एक _gdb टेबल पर एक) और / या किसी भी सुविधा के लिए एक सक्रिय (या अनारक्षित ...) कनेक्शन होता है। वर्तमान में वे जिस वर्ग से जुड़े हुए हैं।

पहुँच विफलता से वापस आने के लिए प्रतीक्षा करने की तुलना में इसका तेज। ताला डैशबोर्ड के साथ ऊपर मैटब का उत्तर कई उपयोगकर्ताओं के लिए एक बढ़िया विचार है।


0

मैं ArcObjects का उपयोग करता हूं और आपके द्वारा बताए गए प्रयास / कैच विधि का उपयोग किया है।

मेरे मामले में एक से अधिक उपयोगकर्ता को एक ही फीचर क्लास में जियोडैटबेस में डेटा पढ़ने और लिखने की जरूरत है। मेरे पास एक "लोड स्क्रीन" है जो ऊपर आती है और उपयोगकर्ता को पता चलता है कि डेटा उपयोग में है और फिर एक लूप बैकग्राउंड में हर कुछ सेकंड की कोशिश करता रहता है जब तक कि उनके लिए एक लॉक बनाने में सक्षम न हो।

जिस तरह से मैंने ताले का उपयोग किया है वह नीचे वर्णित है। मुझे पता है कि लॉक फ़ाइलों को देखने की इस पद्धति का मेरा उपयोग आपको जो करना चाहते हैं उससे अलग है, लेकिन अवधारणा समान है और यदि आप लॉक के प्रकार या लॉक से संबंधित हैं, तो आपको कुछ इसी तरह का उपयोग करने में सक्षम होना चाहिए। । यहाँ जानकारी है अगर आप रुचि रखते हैं।

चूंकि आप विशिष्ट लॉक फ़ाइलों को देख सकते हैं, वे किससे संबंधित हैं, वे किस प्रकार के लॉक हैं आदि। यदि आप विंडोज एक्सप्लोरर में जियोडैटेबस के अंदर देखते हैं, तो एक स्टैंड-अलोन "स्थिति" एप्लिकेशन बनाना है जो विशिष्ट की लॉक फ़ाइलों की निगरानी करता है। सुविधा वर्ग हम सभी उपयोग करते हैं।

इस पद्धति का उपयोग करके मैं वास्तविक समय में एक आसान से डैशबोर्ड को पढ़ने में सक्षम हूं, जिसमें वह फीचर क्लास लॉक है (कंप्यूटर नाम पर आधारित) और किस प्रकार का लॉक है। उदाहरण के लिए यदि यह "sr" (स्कीमा) लॉक देखता है, तो मुझे पता है कि उनके पास उनकी तालिका में जोड़ा गया फीचर क्लास है, "rd" लॉक का मतलब है कि वे फीचर क्लास से पढ़ रहे हैं, "wr" लॉक का अर्थ है कि वे लिख रहे हैं डेटा और एक "एड" लॉक का मतलब है कि उनके पास सुविधा वर्ग पर एक संपादित सत्र खुला है।

यह बहुत उपयोगी होता है जब रखरखाव प्रदर्शन को कम करने में सक्षम होना और यह सुनिश्चित करना कि यह किसी पर नकारात्मक प्रभाव डालने वाला नहीं है। "अनजान" प्रविष्टि मुझे इस बात के लिए भी सचेत करती है कि कोई अनपेक्षित व्यक्ति फीचर क्लास का उपयोग कर रहा है या नहीं और मैं आगे जांच कर सकता हूं।

यहाँ डैश बोर्ड का एक स्क्रीन शॉट इस्तेमाल किया गया है। फ़ीचरक्लास स्थिति डैशबोर्ड

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.