के साथ सी # WinForms में रिकॉर्ड और टेबल लॉकिंग मैं .NET Framework 4.6.1, WinForms, PostgreSQL 6.4beta4 और Npgsql और ADO.NET का उपयोग कर रहा हूं।PostgreSql और ADO.NET
मेरा वर्तमान एप्लिकेशन एक बहु-उपयोगकर्ता-एप्लिकेशन है जहां सभी उपयोगकर्ता एक ही डेटाबेस से कनेक्ट होते हैं।
डेटाटेबल, बाइंडिंगसोर्स, और बाइंडिंगविविगेटर का उपयोग करके डेटा नियंत्रण में बाध्य हो जाता है।
मैं उन दो उपयोगकर्ताओं से बचना चाहता हूं जो एक ही समय में डेटारो संपादित कर सकते हैं। क्योंकि मैं इसे अधिक सामान्य दृष्टिकोण पर कार्यान्वित करना चाहता हूं, मैं डेटाटेबल वंश बनाने के बारे में सोच रहा था और संपत्ति लॉकमोड (कोई नहीं, पंक्ति, तालिका) जोड़ रहा था।
मुझे पता चला कि आप डेटा पर परिवर्तनों का पता लगाने के लिए RowState के साथ संयोजन में कॉलम चेंजेड ईवेंट का उपयोग कर सकते हैं।
अब मुझे पता है कि उपयोगकर्ता एक नया मान डाल रहा है, संपादन (रोस्टस्टेट = संशोधित) एक मौजूदा एक या सिर्फ रिकॉर्ड में (रोस्टेट = अपरिवर्तित) दिखता है।
इसलिए उपयोगकर्ता डेटा संपादन को लॉक करने के बाद मैं डेटारो लॉक करने के लिए एक समाधान की तलाश में हूं। एप्लिकेशन में, जब मैं उपयोगकर्ता लॉक किए गए रिकॉर्ड में उपयोगकर्ता को नेविगेट करता है (बाइंडिंगविविगेटर या प्रोग्रामेटिक रूप से उपयोग करके) एक संदेश प्रदर्शित करना चाहता हूं।
अधिकांश समाधानों को मैंने इस तरह से MySQL सर्वर को लक्षित किया: How to perform a row lock? या TransactionScope locking table and IsolationLevel।
हालांकि मैं एक पोस्टग्रेएसक्यूएल समाधान की तलाश में हूं, इसलिए एमएस (https://msdn.microsoft.com/en-us/library/system.transactions.transactionscope(v=vs.110).aspx) से इस विषय पर लेख यहां भी उपयोग नहीं किए जा सकते हैं।
अगर मैं PostgreSQL और ADO.NET में अनुभव वाले किसी व्यक्ति को यहां मेरी सहायता कर सकता हूं तो मैं सराहना करता हूं। धन्यवाद।
नेट में, क्लाइंट से लोड किया गया डेटा डीबी में उससे "डिस्कनेक्ट" होता है इसलिए कोई लिंक नहीं होता है। उस डेटा के संपादन आमतौर पर कोई फर्क नहीं पड़ता क्योंकि उन्हें आसानी से पूर्ववत/त्याग दिया जाता है। इसके अतिरिक्त, अगर कोई पंक्ति को संपादित करना शुरू करता है और किसी महत्वपूर्ण फोन कॉल द्वारा बाधित होता है तो क्या होगा? क्या आप चाहते हैं कि सभी उपयोगकर्ता अवधि के लिए बंद हो जाएं? क्या होगा यदि वे दोपहर के भोजन के लिए जाएं या बॉस द्वारा बुलाया जाए? – Plutonix
हां, अगर कोई पंक्ति को संपादित करना शुरू करता है, तो मैं इसे अन्य उपयोगकर्ताओं द्वारा गैर-संपादन योग्य बनाना चाहता हूं, भले ही वह लंबे समय तक हो। – Thomas
सबसे सरल समाधान एक कॉलम (बिट) जोड़ सकता है जो संपादन मोड में एक पंक्ति को झुकाता है। एक बार जब उपयोगकर्ता संपादन शुरू कर देता है, तो बिट (1) सेट करें। उपयोगकर्ता को संपादन करने के बाद, बिट (0) – lokusking