DataAdapter in C#: अभी तक हमने ADO.NET Architecture को बनाने वाले विभिन्न Parts के बारे में जाना। साथ ही हमने ये भी जाना कि किस प्रकार से ADO.NET के Data Access के Connected व Disconnected Portions को विभाजित किया गया है और इन्हें विभाजित क्यों किया गया है।
जिस प्रकार से DataReader Object हमें किसी Specified Data Source के Data को Frontend Application में Fetch करने की सुविधा Provide करता है, उसी प्रकार से ADO.NET में एक और Object होता है, जो ADO.NET के पूरी तरह से Disconnected Portion के Objects DataSet, DataTable आदि को DbCommand Object के विभिन्न SQL Statements को Wrap करने वाले Connected Portion के साथ Connect करने के लिए Bridge की तरह काम करता है। ADO.NET के इस Object को DataAdapter Object के नाम से जाना जाता है।
DataAdapter Object न केवल किसी Underlying Data Source के Data से DataSet या DataTable Object को Fill करने का काम करता है, बल्कि ये Object हमें Disconnected Mode में Data Source से आने वाले Data में किए गए Changes को Convenient व Persisting तरीके से फिर से Underlying Data Source के Database में Save करने की सुविधा भी Provide करता है और इस सुविधा को DataAdapter Object के साथ विभिन्न Command Objects को Properties की तरह Specify करके Achieve किया जाता है।
What is DataAdapter
ये Object ADO.NET के Connected व Disconnected Portion के बीच एक Bridge की तरह काम करने वाला Object है। DataAdapter वह Object है, जो हमें Connected Objects जैसे कि DbCommand Object को Use करने की सुविधा Provide करता है, जिसका प्रयोग करके हम Disconnected Object जैसे कि DataSet के साथ काम कर सकते हैं।
जैसाकि हमने पिछले Chapters में देखा था कि किसी Underlying Data Source के साथ काम करने के लिए हमें DbConnection Class से Derived किसी Object को Use करना पडता है। सामान्यत: ये Object SqlConnection या OracleConnection हो सकता है या फिर इन जैसा ही कोई और OleDb या ODBC Client हो सकता है।
किसी DbConnection Class से Derived Open व Available Object पर हम DbCommand Class से Derived किसी Command Object के माध्यम से SQL Command Send कर सकते हैं। जहां DbCommand Object में ये Option उपलब्ध होता है कि वह Underlying Data Source से Return होने वाले Resultset को एक DbDataReader (SqlDataReader, OracleDataReader, etc…) Object में Retrieve कर सकता है या फिर ये एक Scalar Value भी Return कर सकता है। इस प्रकार के Command का प्रयोग किसी भी तरह के Data Manipulation Language (DML) Command को Underlying Database पर Fire करने के लिए किया जा सकता है।
जैसाकि हमने पिछले Chapters में High Demand वाले Multi-User Based Concurrent Application के लिए Connection Pooling के Benefits के बारे में जाना था, जहां DataReader Object एक Read-Only Forward-Only तरीके से काम करता है और Underlying Data Source पर Connection को तब तक Open रखता है, जब तक कि User अपना काम पूरी तरह से समाप्त नहीं कर लेता। साथ ही हमने ये भी जाना था कि लम्बे समय तक Connection को Open रखने से Database की Performance पर किस प्रकार से Negative Effect पडता है।
जबकि पिछले Chapter में हमने ADO.NET के Disconnected Architecture से सम्बंधित विभिन्न Objects जैसे कि DataSets, DataTables, DataRows आदि के बारे में जानाए जो किसी Data को In-Memory MINI RDBMS की तरह विभिन्न प्रकार के Constraints व Relationship के साथ Maintain करने में सक्षम होता है।
इसलिए इस Disconnected Architecture में DataSet व DataTable Objects को किसी Underlying DataSource से आने वाले Data को Fill करना जरूरी होता है। क्योंकि जब हम Underlying DataSource से Connected Mode में Connect होकर Data को Frontend में Retrieve करते हैं, तो उस Retrieved Data को यदि हम ADO.NET के Disconnected Portion यानी DataSet व DataTable Objects के रूप में Store करके हम बडी ही आसानी से Underlying Data Source के Data को Disconnected Mode में ज्यादा बेहतर तरीके से Manage कर सकते हैं।
ADO.NET हमें DbCommand Object Provide करता है, जो उन SQL Queries को Abstract Form में Hold करता है, जिन्हें Underlying Data Source पर Execute करना होता है। DbCommand Object में इस बात की जानकारी होती है कि उसे किस DbConnection के लिए Execute होना है।
DataAdapter Object, DbCommand Object को Define करने के लिए जिम्मेदार होता है और ADO.NET Architecture के Connected Portion के DbCommand व DbConnection तथा Disconnected Portion के DataTable व DataSet के बीच एक Bridge या Gatekeeper की तरह काम करता है।
DataAdapter Architecture
ADO.NET Architecture के Discussion की शु:आत में हमने जाना था कि DataAdapters, IDataAdapter व IdbDataAdapter Interfaces को Implement करते हैं। लेकिन वास्तव में विभिन्न DataAdapter Objects में केवल इन Interfaces के Methods का Definition मात्र नहीं होता, बल्कि DataAdapter के Final Outcome के बीच कुछ और Stages भी Participate करते हैं।
.NET Framework Class Hierarchy में System.Data.Common.DbDataAdapter नाम की एक Abstract या MustInherit Class होती है, जिसे सभी Provider Specific Data Adapters Inherit करते हैं। ये वह DbDataAdapter Class होती है, जिसमें IdbDataAdapter Interface को Implement किया गया होता है।
DbDataAdapter Class, DataSet या DataTable Object को Fill करने तथा Data Source को Update करने के लिए एक Disconnected Data-Access Mechanism Create करने हेतु Basic Functionalities Provide करता है। जबकि DbDataAdapter Class, System.Data.Common.DataAdapter Class से Inherit होता है, जो कि IDataAdapter Interface को Implement करता है।
ADO.NET में दो बहुत ज्यादा उपयोग में लिए जाने वाले SqlDataAdapter व OracleDataAdapter के Structure को हम निम्नानुसार चित्र द्वारा ज्यादा बेहतर तरीके से समझ सकते हैं:
जैसाकि इस चित्र द्वारा हम समझ सकते हैं कि DataAdapter Class System.ComponentModel.Component नाम की Class को भी Inherit करता है। इसलिए DataAdapter Class, जो कि एक Component की तरह व्यवहार करता है, किसी भी ऐसे Object में Hosted हो सकता है, जिसमें IContainer Interface को Implement किया गया हो। इसका मतलब ये है कि DataAdapter को Visually Edit किया जा सकता है और Visual Studio IDE जैसे Container में Design Time में Configure किया जा सकता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF