मैं निम्नलिखित फैशन में TransactionScope
उपयोग कर रहा हूँलेनदेनअबॉर्टेड अपवाद - क्या आप सुरक्षित रूप से फिर से चला सकते हैं?
using (var scope = new TransactionScope())
{
using (var conn = SQLHelpers.GetSQLConnection())
{
//commands here
}
scope.Complete();
}
कभी कभी मैं जब scope.Complete()
के रूप में लेन-देन को पहले से ही वापस लुढ़का कर दिया गया है बुला एक TransactionAbortedException
हो रही है और मैं प्रोफाइलर का इस्तेमाल किया है इस मुद्दे को निर्धारित करने के लिए एक गतिरोध है।
अपवाद लेनदेन (प्रक्रिया आईडी 59) लॉक संसाधनों पर एक और प्रक्रिया के साथ deadlocked था और डेडलॉक पीड़ित के रूप में चुना गया है। लेनदेन फिर से करें।
मैंने बाद पाया गतिरोध का कारण है, लेकिन यह मुझे सोच क्यों इस त्रुटि TransactionAbortedException
तो मैं वास्तव में लेनदेन सिर्फ इतना है कि विशेष मामले के लिए फिर से चला सकते हैं अप करने के लिए बुलबुला नहीं किया गया। आंतरिक अपवाद (ओं) में कोई भी जानकारी नहीं थी जो इंगित कर सके कि वास्तविक त्रुटि क्या थी।
क्या लेन-देन को फिर से चलाने के कारण के रूप में TransactionAbortedException
का पता लगाना सुरक्षित है?
1) गतिरोध
2) टाइमआउट
3)
4 'कनेक्शन बंद कर दिया गया था') .. अन्य:
अब मैं निम्नलिखित भीतरी अपवाद देखा है के लिए?
इन मामलों में से केवल 1 में लेनदेन को फिर से चलाने के लिए उचित लगता है हालांकि यदि आप रोलबैक की गारंटी देते हैं तो आप सभी मामलों में इसे सामान्यीकृत कर सकते हैं। प्रश्न पूछने के लिए फिर से कहा जा सकता है कि 'एक लेनदेन एबॉर्टेड अपवाद गारंटी लेनदेन वापस लुढ़का गया था'?
क्या आप देखते हैं कि लेनदेन की अंतर्निहित अपवाद एबॉर्टेड एक्सेप्शन एक टाइमआउट है? –
कोई भी 'इनर एक्सेप्शन' नहीं है: 'कम्युनिकेशन ट्रांज़ेक्शन अनुरोध का कोई भी संबंधित BEGIN ट्रांज़ेक्शन नहीं है।' और मुझे यह मिल रहा है क्योंकि मैं 'स्कोप' कॉल करता हूं, जब लेनदेन को डेडलॉक द्वारा वापस ले जाया जाता है – wal
इसे आजमाएं (लेनदेन .Current.TransactionInformation.Status == TransactionStatus.Committed) { स्कोप। पूर्ण(); } –