जब हम Disconnected Data Model Use करते हुए Underlying Database के साथ ASP.NET Page के माध्यम से Interaction करते हैं, तब हम एक DataSet Object Use करते हैं, जो कि हमारे Underlying Database का एक In-Memory Representation होता है।
इस Data Access Model में हम Underlying Database के साथ तब तक Connection स्थापित करते हैं, जब तक DataSet Object में Underlying Database से सभी जरूरी Data Retrieve होकर Store नहीं हो जाते और जब एक बार Underlying Database से सभी जरूरी Data Retrieve हो जाते हैं, उसके बाद Underlying Database के साथ Connection को Close कर दिया जाता है।
Disconnected Data Access Model को Use करते हुए Web Applications Develop करने के कई फायदे हैं, जिसके अन्तर्गत Underlying Database के Currently Use हो रहे Snapshot को In-Memory Hold किया जाता है और इनमें से कुछ फायदे निम्नानुसार हैं:
- जब हम हमारे Database के साथ कोई Time Consuming Task Perform करना होता है, तब हम इस Time Consuming Task में Participate करने वाले सारे Data को Underlying Data Source से DataSet Object में Retrieve कर लेते हैं और Underlying Data Source के साथ Connection को केवल तभी तक Open रखा जाता है, जब तक कि सभी वांछित Data पूरी तरह से DataSet Object में Retrieve नहीं हो जाते।
- DataSet Object के Data से किसीNET Data Binding Control जैसे कि GridView को Fill करना काफी आसान होता है। हालांकि यदि हम चाहें तो DataReader Object का प्रयोग करते हुए भी ये काम कर सकते हैं, लेकिन हम सभी प्रकार की स्थितियों को DataReader Object द्वारा Handle नहीं कर सकते और उस स्थिति में DataSet Approach ज्यादा बेहतर साबित होता है। इस प्रकार की स्थितियों की Detailed जानकारी के लिए आप ADO.NET with C# in Hindi पुस्तक पढ़ सकते हैं।
- DataSet का प्रयोग करते हुए Disconnected Data Access Model का प्रयोग करते समय हम किसी Specific प्रकार की Processing के दौरान अपने Data के साथ Backward व Forward Traversing कर सकते हैं। लेकिन DataReader में Stored Data को हम केवल Forward Only तरीके से ही Access व Manipulate कर सकते हैं।
- DataSet का प्रयोग करते हुए हम एक साथ कई Tables के Data को In-Memory Hold कर सकते हैं व एक Virtual RDBMS को Simulate करते हुए अपनी जरूरतों को पूरा कर सकते हैं। यानी हम DataSet में Stored विभिन्न Tables के बीच Relationship Establish करने व Views Create करने जैसे काम कर सकते हैं, जो कि केवल RDBMS आधारित Data पर ही सम्भव है।
- यदि हम चाहें तो अपने DataSet Object के साथ WriteXml() Method का प्रयोग करते हुए DataSet Object के Data को एक XML File के रूप में Disk पर Save कर सकते हैं जबकि ReadXml() Method का प्रयोग करते हुए उसी XML File के Data को फिर से DataSet Object में Fill कर सकते हैं और ये प्रक्रिया DataReader Object के साथ सम्भव ही नहीं है।
- जब हमें Data को एक Component से दूसरे Component को Transfer करना होता है, तब DataSet Object हमें हमारे Data को एक Convenient Package के रूप में Transfer करने की सुविधा देता है। जबकि DataReader Object, Disconnected Model Use करते हुए इसी जरूरत को पूरा करने के लिए Connection को लम्बे समय तक Open रखने की जरूरत पडेगी, जो कि बहुत ही Dangerous Design हो जाएगा।
- जब हम किसी एक Page के लिए Generate होने वाले Dynamic Data को किसी दूसरी Request के Response में Send करना चाहते हैं, तब हमें DataSet को Caching के साथ Use करने की जरूरत पडती है, जो कि DataReader के साथ सम्भव नहीं है।
इसी तरह से और भी बहुत प्रकार की परिस्थितियां होती हैं, जिन्हें केवल Disconnected Model का प्रयोग करते हुए ही Handle किया जा सकता है।
DataSet Object में Stored Data में हम जो भी Changes करते हैं, DataSet Object उन सभी Changes को Track करता है। इस Tracking के कारण हम DataSet Object का प्रयोग करते हुए अपने Records के Data को Update करने की सुविधा प्राप्त कर लेते हैं।
यानी हम हमारे DataSet Object में Stored In-Memory Tables के एक या अधिक Records को Modify करते हैं और फिर DataAdapter Object का प्रयोग करते हुए किए गए Changes को Underlying Database पर Apply कर देते हैं।
ADO.NET का Disconnected Model, Desktop Applications के लिए ज्यादा उपयोगी होता है। क्योंकि Web Applications, HTTP नाम के एक Stateless Protocol पर आधारित होते हैं, जिनमें एक Request का दूसरे Request के साथ कोई सम्बंध नहीं होता, जबकि Desktop Applications Stateful Applications होते हैं, इसलिए Disconnected Model के Desktop Applications के लिए ज्यादा उपयुक्त होते हैं।
Desktop Application में हम हमारे Database के Data में जो भी Changes करते हैं, उन्हें कई Actions Perform करने के बाद Commit किया जा सकता है, क्योंकि Desktop Applications Stateful होते हैं और प्रत्येक Change किस Session में किए गए हैं, हमारे Application को इस बात बिल्कुल निश्चित ज्ञान होता है। जबकि किसी Web Application में हम जो भी Changes Perform करते हैं, उन्हें Instantly Same Request में Commit करना जरूरी होता है, क्योंकि एक Request का दूसरी Request से कोई Direct सम्बंध नहीं होता।
इतना ही नहीं, किसी Web Application में जिस Point पर किसी Page के लिए First Request Perform किया गया था और उस Request के लिए जिस Data को Underlying Data Source से Retrieve करके DataSet Object को Fill किया गया था, अगली Request यानी Postback के दौरान उसी DataSet Object को Maintain रखना काफी मुश्किल होता है।
इसलिए सामान्यत: Disconnected Model का प्रयोग करते हुए Underlying Data Source से Data को Retrieve करके Web Form के Controls को Fill तो किया जाता है, लेकिन DataSet Object में किए गए Changes को Underlying Data Source में Update करने के लिए DataSet Object को Use नहीं किया जाता।
बल्कि जब भी Underlying Database में किसी Incoming Data को Insert या Update करना होता है, तो बेहतर यही होता है कि DataReader Object को Use करते हुए ही इस जरूरत को पूरा किया जाए और DataReader Object को Use करते हुए इस जरूरत को पूरा करने के विषय में Connected Data Model Section में काफी विस्तार से Discuss किया गया है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Advance ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Advance ASP.NET WebForms in Hindi | Page:707 | Format: PDF