2011-03-08 17 views
5

निम्न कोड पर विचार करें जो अपवाद पकड़ा गया है, तो लेनदेन को रोलबैक नहीं करता है।ADO.NET: क्या आपको लेनदेन को रोलबैक करने की आवश्यकता है?

transaction = connection.BeginTransaction(); 
command.Transaction = transaction; 
try { 
    // interact with database here 
catch {} 
finally { 
    connection.Close(); 
} 

इसका क्या परिणाम है और लेनदेन को रोलबैक करना आवश्यक है?

+0

इसे आज़माएं - अपवाद का कारण बनें और परिणाम देखें। आपकी गलती की गई रिपोर्ट लेनदेन के बारे में होगी जो वापस लुढ़का नहीं जा रहा है और यह वास्तव में जो भी अपवाद डाला गया था उसे छुपाएगा। – Paddy

+0

@ धान: क्या आप कह रहे हैं कि लेनदेन के बारे में कोई अपवाद नहीं डाला जाएगा? –

उत्तर

2

यह डेटाबेस पर एक खुला लेनदेन छोड़ देगा, जो अन्य प्रश्नों को संभावित रूप से अवरुद्ध कर सकता है।

here से लिया:

पर विचार के बाद सामान्य दिशा निर्देशों जब आप लेनदेन उपयोग करें ताकि आप गतिरोध के कारण बच सकते हैं: उसी क्रम भर में

  • हमेशा पहुँच तालिकाओं आपके एप्लिकेशन में लेनदेन। डेडलॉक की संभावना बढ़ जाती है जब आप टेबल को प्रत्येक बार पर एक्सेस करते समय अलग-अलग क्रम में एक्सेस करते हैं।

  • लेनदेन को जितना संभव हो सके रखें। लेनदेन से अवरुद्ध या लंबी चलने वाली कॉल न करें। लेन-देन की अवधि को कम रखें। एक दृष्टिकोण डेटा स्रोत के करीब चलने वाले लेनदेन के लिए है। उदाहरण के लिए, के बजाय विभिन्न कंप्यूटर से लेनदेन चलाने के बजाय संग्रहीत प्रक्रिया से लेनदेन चलाएं।

  • अलगाव का स्तर चुनें जो समेकन और डेटा अखंडता को संतुलित करता है। उच्चतम पृथक्करण स्तर, क्रमिक, समेकन को कम करता है और डेटा अखंडता के उच्चतम स्तर प्रदान करता है। सबसे कम अलगाव स्तर, असामान्य पढ़ें, विपरीत परिणाम देता है।

    using(/*code to create the transaction you want) 
    { 
        //perform your transaction here 
        transaction.Commit(); 
    } 
    

    आप कोड में विफल रहता है कॉल के लिए प्रतिबद्ध करने से पहले, यह स्वतः ही वापस ब्लॉक का उपयोग के रूप में तैयार की जाएगी, तो:

+1

+1। जब तक जीसी किक नहीं करता है, तब तक यह सभी संभावित ताले रखता है। प्रदर्शन के लिए विनाशकारी हो सकता है। – TomTom

+0

जब लेन-देन किए बिना कनेक्शन बंद हो जाता है तो लेनदेन समाप्त होता है। मुझे समझ में नहीं आता कि यह क्यों स्वीकार किया गया था। एक लेनदेन के लिए एक कनेक्शन की आवश्यकता होती है। यदि कनेक्शन खत्म हो गया है, तो ट्रैन भी है। – usr

14

सबसे अच्छा इस तरह की एक का उपयोग कर ब्लॉक के अंदर अपना लेन-देन उत्पन्न करने के लिए है बाहर निकला है

संबंधित मुद्दे