C# DataAdapter: DataAdapter एक ऐसी Class है, जिसका प्रयोग DataTable Objects के साथ DataSet Object को Fill करने के लिए किया जाता है। ये Class Modified DataTable Object के Data को भी Processing के लिए Underlying Database पर Send कर सकता है। यानी ये Object वास्तव में ADO.NET के Disconnected Layer व Connected Layer के बीच Bridge की तरह काम करता है।
DataAdapter Members
हर Data Provider अपने DataAdapter Class को Implement करने के लिए वास्तव में DbDataAdapter नाम की Base Class को Inherit करता है। इस Base Class में मूल रूप से निम्न Members को Define किया गया है, जिन्हें सभी Data Providers द्वारा Provide किए जाने वाले DataAdapter Objects Implement करते हैं:
Fill() Method
ये Method उस SQL SELECT Command को Execute करता है, जिसे SelectCommand Property में Specify किया गया होता है। इस SELECT Command के Execute होने पर Underlying Database से Data Retrieve होता है, उस Data से DataTable Objects को Load किया जाता है।
Update() Method
ये Method उस SQL INSERT, UPDATE, DELETE Command को Execute करता है, जिसे InsertCommand, UpdateCommand, DeleteCommand Property में Specify किया गया होता है। इस Method के Execute होने पर DataSet Object में Contained DataTable Objects के Data में जो भी Changes किए गए होते हैं, उन्हें Underlying Database पर Permanently Apply कर दिया जाता है।
SelectCommand Property
InsertCommand Property
UpdateCommand Property
DeleteCommand Property
ये चारों Methods अपने नाम के अनुसार SQL Commands को Establish करते हैं जिन्हें हम Fill() या Update() Methods के माध्यम से Underlying Data Store पर Execute करना चाहते हैं।
जैसाकि हम समझ सकते हैं कि DataAdapter Object चार Properties Define करता है, जो कि SELECT, INSERT, UPDATE व DELETE SQL Statements को Hold करते हैं। जब हम किसी Particular Data Provider के लिए कोई DataAdapter Object Create करते हैं, तो उसमें एक String के रूप में Command Text को Pass कर सकते हैं।
इस Command Text को SelectCommand के Command Object द्वारा Command Text के रूप में Use कर लिया जाता है, जो कि जरूरत पडने पर बाद में Underlying Data Source पर Execute किया जाता है।
यदि हम ये मान लें कि DataAdapter Object की चारों ही Command Properties Proper तरीके से Configured हैं, तो फिर हम DataSet/DataTable को Obtain करने के लिए Fill() Method को Call कर सकते हैं। ऐसा करने के लिए हम DataAdapter Object के उस SQL SELECT Statement को Execute करते हैं, जो कि DataAdapter के SelectCommand Property में Specified होता है।
इसी तरह से यदि हम हमारे Frontend Application द्वारा Modified DataSet/DataTable Object के Data को Underlying Database में Permanently Save करना चाहते हैं, तो हम DataAdapter Object के Update() Method को Call करते हैं, जो कि DataTable के हर Row की DataRowState Property के आधार पर अन्य Remaining Command Objects जैसे कि InsertCommand, UpdateCommand या DeleteCommand को Execute करता है।
हालांकि जब हम DataAdapter Object Use करते हैं, तब हम स्वयं कभी भी Underlying Database पर Connection को Open/Close नहीं करते, लेकिन फिर भी हमें हमारे DataAdapter को Underlying Database से Connection Establish करने के लिए ConnectionString Supply करना जरूरी होता है, जिसका प्रयोग DataAdapter Object द्वारा Underlying Database से Data को Retrieve करने के लिए अथवा Underlying Database में Data को Insertion, Updating या Deletion के माध्यम से Update करने के लिए Internally किया जाता है।
DataAdapter की Working को समझने के लिए हम हमारे पिछले Example Program के Main() Method को ही निम्नानुसार Modify कर सकते हैं:
static void Main(string[] args) { // Hard-coded connection string. string cnStr = "Data Source=KULDEEP\\SQLSERVEREXPRESS;Initial Catalog=Northwind;Integrated Security=True"; // Caller creates the DataSet object. DataSet ds = new DataSet("Northwind"); // Inform adapter of the Select command text and connection string. SqlDataAdapter dAdapt = new SqlDataAdapter("Select * From Products", cnStr); // Fill our DataSet with a new table, named Inventory. dAdapt.Fill(ds, "Products"); // Display contents of DataSet using helper method created earlier in this chapter. PrintDataSet(ds); }
यदि हम हमारे Main() Method को उपरोक्तानुसार Modify करके अपने Program को Run करते हैं, तो हमें निम्नानुसार Output प्राप्त होता है:
हम देख सकते हैं कि Output Window में हमें Appropriate Data प्राप्त हो रहा है, जबकि हमने हमारे DataSet Object या DataTable Object में कोई Data Store नहीं किया है। ऐसा इसलिए हो रहा है, क्योंकि इस बार हमारा DataSet Object हमारे द्वारा Create किए जाने वाले Manual Data से Fill नहीं हो रहा है, बल्कि हमारे Northwind Database की Products Table में Existed Actual Data से Fill हो रहा है।
जैसाकि इस Main() Method के Code द्वारा हम समझ सकते हैं कि सबसे पहले हमने निम्नानुसार एक ConnectionString Create किया है, जो कि DataAdapter को इस बात की Information देता है कि उसे किस Data Source से और कैसे Connect होना है:
// Hard-coded connection string. string cnStr = "Data Source=KULDEEP\\SQLSERVEREXPRESS;Initial Catalog=Northwind;Integrated Security=True";
ConnectionString Setup करने के बाद निम्नानुसार Statement Execute होता है, जो एक DataSet Object Create करता है:
// Caller creates the DataSet object.
DataSet ds = new DataSet(“Northwind”);
DataSet Object Create करने के बाद निम्नानुसार Statement द्वारा एक DataAdapter Object Create किया जाता है:
// Inform adapter of the Select command text and connection string.
SqlDataAdapter dAdapt = new SqlDataAdapter(“Select * From Products”, cnStr);
DataAdapter Object के Constructor में Specified SQL SELECT Query व ConnectionString के माध्यम DataAdapter Object को इस बात के लिए Configure किया गया है, कि DataAdapter के Execute होने पर किस Underlying Database पर SQL Statement Execute होगा और कौनसा SQL Statement Execute होगा।
हालांकि उपरोक्तानुसार Statement के माध्यम से Create होने वाला DataAdapter Object अभी तक Execute नहीं हुआ है बल्कि इस DataAdapter Object द्वारा क्या और कैसे Perform होगा, इस बात को Configure किया गया है। DataAdapter Object को Configure करने के बाद निम्न Statement द्वारा DataAdapter Object के लिए Fill() Method को Call किया गया है:
// Fill our DataSet with a new table, named Inventory.
dAdapt.Fill(ds, “Products”);
Fill() Method Execute होते ही DataAdapter Object Execute होता है। परिणामस्वरूप Underlying Database पर SQL SELECT Query Fire होता है, जो Underlying Database के Products Table के सारे Rows को Retrieve करता है और इन Retrieved Rows से Fill() Method के पहले Parameter के रूप में Specified के नाम के DataSet Object को Fill कर देता है।
इस Fill() Method के दूसरे Parameter के रूप में हमने एक String Format में “Products” Specify किया है। ये नाम वास्तव में हमारे DataSet Object में Create होने वाले नए DataTable Object का नाम है। जबकि यदि हम ये नाम Specify न करें, तो DataAdapter स्वयं ही इसे Default रूप से “Table” नाम Assign कर देगा।
ज्यादातर परिस्थितियों में हम इस Fill() Method के दूसरे Argument के रूप में जो नाम Specify करते हैं, वह नाम Underlying Database के Table के नाम के समान ही रखा जाता है। ताकि DataTable व Database की Table को समान नाम से Identify किया जा सके। हालांकि ऐसा जरूरी नहीं है और हम कोई अन्य नाम भी Specify कर सकते हैं।
परिणामस्वरूप इस Statement के Execute होने पर ds Object, Underlying Database की Products Table के Data से पूरी तरह से Fill हो जाता है, जिसे Output में Display करने के लिए हमने फिर से PrintDataSet() Method को निम्नानुसार Statement द्वारा Invoke किया है, जिसे हमने पिछले Example में Create किया था%
// Display contents of DataSet using helper method created earlier in this chapter.
PrintDataSet(ds);
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF