ADO.NET Transaction Support: ADO.NET हमें Database Transactions को Handle करने के लिए काफी बेहतर Support Provide करता है। ADO.NET स्वयं Single Database Transaction को Support करता है, जिसे Per Transaction Basis पर Track किया जा सकता है। जबकि Cross-Database Transaction को Handle करने के लिए System.Transactions द्वारा Provided Functionalities को Use करता है।
ADO.NET की Transaction Functionality को Connection Object द्वारा प्राप्त किया जाता है। ADO.NET का Connection Object केवल किसी Transaction को Start करने का काम करता है। जबकि Transaction को Commit या Rollback करने का काम, Transaction Class से Derived किसी Specific Implementation Object द्वारा Handle किया जाता है।
ये Object हमें किसी Single Transaction Object के साथ Multiple Different Command Objects को Associate करने की सुविधा Provide करता है। इसलिए एक ही Transaction में अलग-अलग Commands Participate करने में सक्षम हो जाते हैं।
ADO.NET हमें Connected व Disconnected दोनों प्रकार के Data Access Provide करता है और दोनों ही प्रकार के Models के लिए Transactions को Support करता है। Connected Mode में एक Transaction के Flow होने का Sequence कुछ निम्नानुसार होता है:
- Open a database connection.
- Begin a transaction.
- Fire queries directly against the connection via the command object.
- Commit or roll back the transaction.
- Close the connection.
Connected Mode में Transaction के काम करने के तरीके को हम निम्न चित्र के रूप में भी Represent कर सकते हैं:
जबकि Disconnected Mode सामान्यत: एक या एक से अधिक Tables के Data, DataSet Object में पहले Fetch होते हैं। फिर Data Source के साथ Connection Close हो जाता है। फिर जरूरत के अनुसार उस DataSet Object में Disconnected Mode में Stored Data के साथ Manipulation किया जाता है और Manipulated Data को फिर से Underlying Data Source में Update किया जाता है। इस स्थिति में Perform होने वाले Operations निम्नानुसार Sequence में Flow होते हैं:
- Open a database connection.
- Fetch the required data in a DataSet object.
- Close the database connection.
- Manipulate the data in the DataSet object.
- Again, open a connection with the database.
- Start a transaction.
- Assign the transaction object to the relevant commands on the data adapter.
- Update the database with changes from the DataSet.
- Close the connection.
Disconnected Mode में Transaction के काम करने के तरीके को हम निम्न चित्र के रूप में भी Represent कर सकते हैं:
Connected Mode में Transaction को Implement करना Disconnected Mode की तुलना में काफी आसान होता है क्योंकि एक Transaction के Execution की Sequence का हर Step Underlying Database के साथ Live Connected रहता है।
लेकिन Disconnected Mode में जब Data को Underlying Database में Update किया जाता है, तब हमें Concurrency Related Issues को ध्यान में रखना जरूरी होता है। साथ ही हमारे Architecture के आधार पर हमें हमारे DataSet Object में किए गए Changes को भी Rollback करने की जरूरत पड सकती है। जबकि Underlying Database में Data Update होते समय यदि Underlying Database पर Transaction Fail हो जाता है, तो उस Failed Transaction के Response में हमारे DataSet Object में होने वाले Changes को भी Rollback होने की जरूरत पड सकती है।
Transaction Class
OleDb, SqlClient, OracleClient व ODBC आदि के रूप में .NET Framework में कई .NET Managed Providers Available हैं, जिनका स्वयं का Transaction Class Implemented है।
यानी OleDb Data Provider के लिए OleDbTransaction Class Implemented है जो कि System.Data.OleDb Namespace में Exist है। Oracle Data Provider के लिए OracleTransaction Class Implemented है जो कि System.Data.Oracle Namespace में Exist है। SQL Data Provider के लिए SqlTransaction Class Implemented है जो कि System.Data.Sql Namespace में Exist है। ODBC Data Provider के लिए OdbcTransaction Class Implemented है जो कि System.Data.Odbc Namespace में Exist है।
यानी हर Data Provider के लिए इसी प्रकार से स्वयं की एक Transaction Class Implemented है, जिसे हमें उस Particular Data Source को Use करते समय Transaction Management के लिए उपयोग में लेना होता है।
ये सभी Classes IDbTransaction Interface को Implement करते हैं, जो कि System.Data Namespace में Exist है। इन Classes की ज्यादातर Properties व Methods Identical है। जबकि सभी Data Sources के लिए उनसे सम्बंधित कुछ Special Specific Properties व Methods भी हैं, जो कि किसी भी अन्य Data Source के लिए Available नहीं हैं।
Transaction Methods
Transaction Class में मूल रूप से दो Methods होते हैं, जो कि Commit व Rollback को Represent करते हैं।
Commit
ये Method किसी Transaction के Successful होने को Identify करता है। जब हम एक बार इस Method को Call करते हैं, तो सभी Pending Changes Underlying Database में Permanently Save हो जाते हैं। इस Method का Exact Implementation हमेंशा Underlying Data Source के Data Provider पर निर्भर करता है।
Rollback
ये Method इस बात को Mark करता है कि Transaction Unsuccessful रहा है। परिणामस्वरूप Transaction के Statements के Execution के कारण Underlying Database में जो भी Changes हुए हैं, उन्हें Discard कर दिया जाता है और Database को फिर से Unchanged State में पहुंचा दिया जाता है।
जब हम Transaction को Use कर रहे होते हैं, तब उपरोक्त दोनों ही Methods को सामान्यत: एक साथ ही Use किया जाता है। जैसे:
using( SqlConnection con = new SqlConnection(conString) ) { con.Open(); tran = con.BeginTransaction(); com1.Transaction = tran; com2.Transaction = tran; try { com1.ExecuteNonQuery(); com2.ExecuteNonQuery(); tran.Commit(); } catch { tran.Rollback(); throw; } finally { tran.Close(); } }
Command Object की एक Transaction Property होती है, जिसे उस स्थिति में Set करना जरूरी होता है, जब हम हमारे Command को Transaction के अन्दर Execute करना चाहते हैं। Transaction Class में और भी Properties व Methods होते हैं, जिनके बारे में हम जरूरत के अनुसार Discuss करेंगे।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF