2009-04-22 9 views
7

यह Nested Database transactions in C# से संबंधित है।क्या मैं SqlConnection.BeginTransaction और TransactionScope मिश्रण कर सकता हूं?

संग्रह में ऑब्जेक्ट्स मैं लेनदेन में लेना चाहता हूं SqlConnection.BeginTransaction विधि का उपयोग करके अपने लेनदेन को लागू करना चाहता हूं।

यह post पढ़ने के बाद मुझे यकीन नहीं है कि मैं उन्हें भी मिश्रण कर सकता हूं या नहीं। मैं SQL सर्वर 2005 का उपयोग कर रहा हूं और प्रत्येक ऑब्जेक्ट स्थिर कॉन्फ़िगरेशन क्लास से कनेक्शन विवरण का उपयोग करता है।

क्या किसी के पास इसका अनुभव है?

यहाँ नमूना कोड है:

using(TransactionScope scope = new TransactionScope()) 
{ 
    for (int i=0; i<=1000....) 
    { 
    SqlConnection con = new SqlConnection() 
    SqlCommand cmd = new SqlCommand("delete from ...", con); 

    try { 
     con.Open(); 
     DbTransaction t = con.BeginTransaction(); 
     cmd.ExecuteNonQuery(); 
     ... 
     cmd.CommandText = .... ; 
     cmd.ExecuteNonQuery(); 
     t.Commit ... 
    } 
    catch { 
     t.Rollback ... 
    } 
    con.Close() 
    } 
} 

Thx

उत्तर

5

कॉन्फ़िगर करने के लिए MSDTC दोनों मशीनों पर काम करने के घंटे बिताने के बाद, मैं अंत में बिंदु है जहां मैं कोड का परीक्षण कर सकता का मौका मिला।

यह (1 डाटाबेस के साथ)

ऊपर समस्या लोगों की है कि स्रोत कोड तक पहुंच तो "विरासत" लेन-देन संबंधी प्रणाली या यदि व्यवहार से छुटकारा पाने के नहीं कर सकते हैं की जरूरत नहीं है के लिए उपयोगी हो सकता है काम करने के लिए प्रकट होता है कोड के कुछ हिस्सों को स्थानीयकृत नहीं किया गया है, या मेरे मामले में, आप जटिल वातावरण के साथ बहुत गड़बड़ नहीं करना चाहते हैं जो उत्पादन वातावरण में स्थिर साबित हुआ है लेकिन आपको नेस्टेड लेनदेन शुरू करने की आवश्यकता है ...

अगर आपके पास अलग अनुभव है तो मुझे बताएं।

+0

आपको इस प्रश्न का उत्तर के रूप में अपना उत्तर चिह्नित करना चाहिए - इसकी अनुमति है! – Fenton

+1

मेरे मामले में हमारे पास "यूनिट" परीक्षण हैं जो ट्रांज़ेक्शनस्कोप में लिपटे हैं ताकि हमारी विकास मशीनों पर हम प्रत्येक टेस्ट और टेस्ट क्लास के बारे में सोचने के बिना जटिल डेटाबेस मैनिप्लेशंस प्राप्त कर सकें और इसे सभी [सैद्धांतिक रूप से] लुढ़का हुआ वापस प्राप्त कर सकें। साथ ही, हम उत्पादन सर्वर पर एमएस डीटीसी उपयोग नहीं करना चाहते हैं, और मैं नियमित लेनदेन में कुछ यौगिक इकाई फ्रेमवर्क इकाई कुशलता को लपेटना चाहता था ताकि अगर कोई भी विफल हो जाए तो पूरा ऑपरेशन रोलबैक कर सकता है ... आदर्श रूप से TransactionScope काम करना जारी रखना चाहिए, और आंतरिक लेनदेन भी चाहिए ... – bambams

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

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