2010-03-31 19 views
6

एसक्यूएल/एडीओ के साथ काम करते हुए, मुझे कुछ ऐसी चीज के बारे में सोचने लगा जो मुझे लगता है कि तर्कसंगत रूप से .net ढांचे के साथ शामिल किया जाना चाहिए, और मैं सोच रहा था कि ऐसी कोई चीज़ मौजूद है, तो मुझे समझाएं।.net, क्या आपको लेनदेन वस्तु मिलती है?

क्या कोई ऑब्जेक्ट है जो अनिवार्य रूप से एक लेनदेन प्रबंधक है, कि आप आदेश (कार्य आइटम) को पास करते हैं और उसी पर मैं कल्पना करता हूं कि लेनदेन में प्रत्येक कार्य आइटम के लिए रोलबैक कार्रवाइयां भी आवश्यक होंगी।

उदाहरण

के लिए देता है कहते हैं कि मैं निम्नलिखित कार्रवाई करने के लिए चाहता था:

  1. एक फ़ोल्डर
  2. बनाएं इस फ़ोल्डर
  3. में एक फ़ाइल बनाएँ संपादन reg कुंजी जैसे कुछ अन्य विविध कार्य , या वास्तव में आप जिस क्रिया के बारे में सोच सकते हैं उसे वापस लुढ़काया जा सकता है।

वर्तमान में यदि कुछ विफल हो जाता है, तो मुझे रोल रोल रणनीति को मैन्युअल रूप से कार्यान्वित करने की आवश्यकता है, तो शायद इन काम आइटम्स को ओब .नेट कार्यक्षमता का उपयोग करके लेनदेन के रूप में प्रबंधित करने का एक तरीका मौजूद है?

मेरी राय यह है कि यह आइटम रोलबैक स्वचालित रूप से करने के लिए बहुत कुछ पूछेगा, लेकिन मैन्युअल रूप से रोलबैक प्रति कार्य आइटम के दौरान जो होता है उसे मैन्युअल रूप से नियंत्रित करने की क्षमता होने पर, व्यावहारिक लगता है।

माइक्रोसॉफ्ट ने LINQ के साथ जो कुछ किया है वह वास्तव में बहुत अच्छा है, प्रभावी रूप से एसक्यूएल को सभी प्रकार की सामग्री के लिए प्रश्नों की तरह, एसक्यूएल टेबल के लिए नहीं। तो शायद LINQ के साथ कुछ लेनदेन मॉडल है?

धन्यवाद, अगर आपको ऐसा कुछ पता है?

उत्तर

0

आम तौर पर इस अर्थ में लेनदेन डीबी आईओ को इंगित करता है, और फाइल सिस्टम संचालन नहीं करता है। ADO.Net 2.0 में, आप नीचे दिए गए कोड की तरह कुछ करेंगे।

अन्य प्रकार के लेनदेन के लिए, मैं एमएस डीटीसी (वितरित लेनदेन समन्वयक) की तलाश करने का सुझाव दूंगा। यह आपके लेनदेन को विभिन्न मशीनों को फैलाने की अनुमति देगा, और मुझे यह भी विश्वास है कि आपको कस्टम क्रियाओं को वापस लुढ़कने की अनुमति मिलती है।

मुझे उम्मीद है कि इससे मदद मिलती है।

using (SqlConnection connection = 
      new SqlConnection(connectionString)) 
{ 
    SqlCommand command = connection.CreateCommand(); 
    SqlTransaction transaction = null; 

    try 
    { 
     // BeginTransaction() Requires Open Connection 
     connection.Open(); 

     transaction = connection.BeginTransaction(); 

     // Assign Transaction to Command 
     command.Transaction = transaction; 

     // Execute 1st Command 
     command.CommandText = "Insert ..."; 
     command.ExecuteNonQuery(); 

     // Execute 2nd Command 
     command.CommandText = "Update..."; 
     command.ExecuteNonQuery(); 

     transaction.Commit(); 
    } 
    catch 
    { 
     transaction.Rollback(); 
     throw; 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 
5

आप एक सौदे शुरू करने के लिए TransactionScope वर्ग का उपयोग कर सकते हैं, लेकिन किसी भी कार्रवाई आपको लगता है कि लेन-देन के अंदर ले "लेन-देन के बारे में पता" हो सकता है और पता है कि अगर लेन-देन वापस लुढ़का हुआ है क्षतिपूर्ति करने के लिए किया है।

ब्रेंट वेंडरमेइड ने ट्रांज़ेक्शनस्कोप के बारे में जानने वाले वर्गों को लिखने के तरीके पर डीएनआरटीवी पर दो भाग वाली श्रृंखला की। यहां part 1 है, और यहां part 2 है।

+0

यह बहुत ही आशाजनक लग रहा है, ऐसा लगता है कि यह डेटाबेस तक ही सीमित नहीं है? –

+0

ऐसा नहीं है कि मुझे पता है, नहीं। वीडियो देखें - ब्रेंट लिखने वाले वर्ग डीबी से संबंधित आईआईआरसी नहीं हैं। –

+0

ट्रांजैक्शन स्कॉप्स बहुत अच्छे हैं जिसमें आप अपने लेनदेन के अंदर लिखे गए नेट कोड को रख सकते हैं। –

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