अब जबकि हमारे पास एक Object है जिसमें Disconnected Data Hold है और विभिन्न प्रकार के Transnational व Parameterized Commands Execute होने व Disconnected Data से Connect होने के लिए विभिन्न प्रकार के Objects का समूह उपलब्ध है, अब हमारे पास Underlying Data Source से Data को Fetch करने के लिए दो तरीके हैं, जिनका प्रयोग किया जा सकता है। इन दोनों तरीकों में मुख्य अन्तर इस बात का है कि ये दोनों तरीके कितनी देर तक Connection को Open रखते हैं।
पहले तरीके के अन्तर्गत हम DataReader Object Use करते हैं, जिसे Generated Result को Fetch करने के लिए Open व Available Connection की जरूरत होती है। ये तरीका Single User होने की स्थिति में ज्यादा Fast Speed से काम करता है। लेकिन जब बहुत सारे Users इस प्रकार से Access हो रहे Data को Use करते हैं, तब ये तरीका Connection Pooling को काफी प्रभावित करता है।
दूसरे तरीके के अन्तर्गत हम DataAdapter Object को Use करते हैं। ये Object थोडा अलग तरीके से काम करता है, जिसमें ये Object Command को Execute करने के बाद Generate होने वाले Resultset को एक DataSet या DataTable Object में Fill करता है, जो कि एक प्रकार का Disconnected Cache होता है।
जब एक बार ये Object Command के Fire होने के बाद Generate होने वाले सारे Data को किसी Appropriate Object में Fill कर देता है, उसके बाद ये अपने आपको Underlying Data Source से Disconnect कर लेता है। जिससे उस Underlying Physical Connection को किसी अन्य Object द्वारा Reuse किया जा सकता है।
DbDataReader – To Fetch Data in Connected Way
कुछ Commands Data Fetch करते हैं, कुछ Commands Data Manipulate करते हैं जबकि कुछ Commands दोनों काम करते हैं। इस वजह से Command को Execute करने के लिए DbCommand में कई Methods होते हैं।
उदाहरण के लिए DbCommand Object में ExecuteNonQuery() नाम का एक Method होता है, जो Command के Execute होने पर Affect होने वाले कुल Rows की संख्या Return करता है। इसी प्रकार से DbCommand हमें ExecuteReader() नाम का एक और Method Provide करता है, जिसे तब Use किया जाता है, जब हम किसी Query के Result को Resultset की तरह Fetch करना चाहते हैं।
जबकि DbCommand का ExecuteReader() Method एक ऐसा Object Return करता है, जो कि DbDataReader Class से Inherited होता है। जहां DbDataReader एक Common Abstract Base Class है और किसी भी Data Reader Class को इसे Inherit करना जरूरी होता है। इस व्यवस्था को हम निम्न चित्र द्वारा बेहतर तरीके से समझ सकते हैं:
जब हमारे पास एक DataReader Object होता है, तब हम इसके साथ विभिन्न प्रकार के Methods को Use कर सकते हैं, Returned Resultset के विभिन्न Records पर Iterate कर सकते हैं और Current Position के Record के विभिन्न Columns की Values को Read कर सकते हैं।
यहां इस बात को ध्यान रखना जरूरी है कि Data Reader एक Read-Only या Forward-Only Object होता है, जो उसी स्थिति में काम करता है, जबकि Underlying Physical Database Connection Open होता है।
DbDataAdapter – Bridge between Connected and Disconnected
DataAdapter Object एक Bridge Object होता है, जो ADO.NET के Disconnected Part व Connected Part के बीच Exist होता है और दोनों के बीच के Communication का माध्यम बनता है।
चूंकि Data Adapter Object का Actual Implementation पूरी तरह से Underlying Data Source पर आधारित होता है, इसलिए यदि Backend के रूप में MSSQL Server को Use किया जा रहा हो, तो ADO.NET के Connected व Disconnected Parts को Communicate करवाने के लिए SqlDataAdapter की जरूरत होती है जबकि यदि Backend के रूप में Oracle Server को Use किया जा रहा हो, तो ADO.NET के Connected व Disconnected Parts को Communicate करवाने के लिए OracleDataAdapter की जरूरत होती है।
जबकि यदि हमें ODBC या OleDb के माध्यम से Generic Access की जरूरत हो, तो हमें OdbcDataAdapter व OleDbDataAdapter जैसे Generic Data Adapters के माध्यम से ADO.NET के Connected व Disconnected Parts के बीच Communication स्थापित करवाना पडता है।
साथ ही ADO.NET Object के अन्य Connected Parts की तरह ही विभिन्न Data Adapters के बीच Commonality को Enforce करने की सुविधा DbDataAdapter Class के माध्यम से प्राप्त होती है, जिसके बारे में हम निम्न चित्र द्वारा बेहतर तरीके से समझ सकते हैं:
जैसाकि हम उपरोक्त चित्र में देख सकते हैं कि SqlCommand व OracleCommand नाम की दो Classes हैं और दोनों ही Classes DbCommand नाम की Class से Inherited हैं।
Data Adapter Class को Normal तरीके से काम करने के लिए विभिन्न DbCommand जैसे कि InsertCommand, UpdateCommand, DeleteCommand व SelectCommand की जरूरत होती है जो कि क्रमश: INSERT, UPDATE, DELETE व SELECT नाम के SQL Operations को Represent करते हैं। DbDataAdapter नाम की Base Class, DbCommand Data Type की चार Properties के रूप में इन्हीं चारों Commands को Define करता है।
SqlDataAdapter, OracleDataAdapter आदि अन्य Specific Data Adapters भी ADO.NET Connected Objects के समान ही इन्हीं चारों Commands InsertCommand, UpdateCommand, DeleteCommand व SelectCommand को चार Properties के रूप में Available करवाते हैं, जो कि Data Provider Specific Command Objects जैसे कि SqlCommand व OracleCommand को Value के रूप में Accept करते हैं। (DataReader and DataAdapter)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF