DBConnect ADO.NET: Data Source के साथ किसी भी प्रकार की प्रक्रिया करने के लिए सबसे पहले हमारे Frontend Application को Backend Database से Connection स्थापित करना होता है। चूंकि वर्तमान समय में विभिन्न प्रकार के Data Sources (Oracle, SQL Server, MySql, etc…) Exist हैं और एक ही Computer System पर अलग-अलग Data Sources को Install किया जा सकता है, इसलिए हमें हमारे Frontend Application का जिस Data Source के साथ Connection स्थापित करना होता है, उस Data Source के Name, User ID व Password की जरूरत होती है।
हालांकि विभिन्न प्रकार के Data Sources, विभिन्न प्रकार के Operations को Support करते हैं। लेकिन सभी Data Sources में कुछ Functionalities पूरी तरह से Common भी होती है। जैसे कि Connection Establish करना, Data को Database में Insert, Update, Delete करना व Database के Connection को Close करना, आदि। यानी विभिन्न प्रकार के Data Sources में आपस में कुछ समानताऐं होती हैं तो कुछ असमानताऐं भी होती हैं। इसलिए ये समझना जरूरी है कि हर Data Source के Connection Object का एक Individual Implementation होता है, जो कि समान Base Class से Inherit होता है और समान Interfaces को Implement करता है। समान Base Class से Inherit होना सभी Data Sources की समान Functionalities को Represent करता है जबकि Create होने वाली नई Class, में Defined व Implemented न, Features, विभिन्न Data Sources की विभिन्नताओं को Specify करने का काम करते हैं।
ADO.NET की Connection Class, DbConnection नाम की Base Class से Inherit होकर तथा IDbConnection Interface को Implement करके यही काम करता है। यानी Base Class की Common Functionalities जैसे कि Connection Open करना, Connection Close करना आदि प्राप्त करता है जबकि Create होने वाली नई Connection Class में Data Source की Specialties को Handle करने से सम्बंधित Specific बातों को इस Newly Create होने वाली Connection Class में IDbConnection Interface को Implement करके Define किया जाता है।
इस प्रकार से SqlConnection Class, जो कि System.Data.SqlClient.SqlConnection के रूप में Exist है, System.Data.Common.DbConnection से Inherited है और System.Data.Common .DbConnection Class में System.Data.IDbConnection Interface Implemented है।
इसी तरह से OracleConnection Class, जो कि System.Data.SqlClient. OracleConnection के रूप में Exist है, System.Data.Common.DbConnection से Inherited है और System.Data.Common.DbConnection Class में System.Data.IDbConnection Interface Implemented है। इस Hierarchy को हम निम्न चित्रानुसार ज्यादा सरल तरीके से Represent कर सकते हैं:
यानी ADO.NET Architecture में एक Valid Connection Object के रूप में Qualify करने के लिए किसी भी Class को System.Data.Common.DbConnection Class को Inherit करना पडता है। जैसाकि उपरोक्त चित्र में हम देख सकते हैं कि SqlConnection व OracleConnection नाम की दोनों Connection Classes न केवल IDbConnection Interface को Implement कर रहे हैं, बल्कि IDisposable Interface को भी Implement कर रहे हैं।
ऐसा इसलिए किया जा रहा है क्योंकि हर Connection Object कुछ Valuable Resources (Memory) Occupy करता है, जिसे Dispose न करने पर वह Resource किसी अन्य Object के लिए Usable नहीं रहता, जब तक कि CLR द्वारा Automated Garbage Collection Perform न किया जाए। लेकिन IDisposable Interface को Implement करने पर Create की जा रही Connection Class में Dispose() Method को Implement करना जरूरी हो जाता है।
परिणामस्वरूप हमारे Connection Class द्वारा Occupied Resources को Dispose करने का Control हमारे पास आ जाता है और हम हमारी जरूरत व इच्छानुसार जब चाहें तब Connection को Dispose करते हुए Connection द्वारा Occupied Resources को Free कर सकते हैं।
इसी प्रकार से IDbConnection नाम का Interface विभिन्न Connection Objects के बीच एक Common आधार Establish करने के लिए कुछ Common Properties व Methods Specify करता है, जिसे इस Interface को Implement करने वाली Class में Define करना Compulsory होता है, ताकि सभी Connection Objects का आधार एक समान हो और सभी Connection Objects, Valid Connection Object के रूप में Qualify हो सकें। यानी सभी Connection Objects Frontend से Connection Establish करने, Connection Close करने जैसे Common Tasks को Perform करने के मामले में एक समान हों। इसी वजह से किसी भी .NET Data Provider को Data Source पर Connection Establish करने के लिए Use करते समय हम Open() नाम के Method को ही Use करते हैं, Connect() या EstablishConnection() नाम के Method को नहीं।
क्योंकि पिछले Paragraph में Discussed तरीके के अनुसार Connection Class Define करने की वजह से सभी .NET Data Providers को Connection Class से सम्बंधित समान Architecture को Follow करना पडता है। इसलिए चाहे जो भी Data Source हो, उस Data Source से सम्बंधित Common Functionalities को Perform करने के लिए Common नामों का ही प्रयोग करते हुए Connection Class को Define करना जरूरी होता है।
पिछले चित्र के अनुसार ध्यान देने वाली एक और बात ये भी है कि DbConnection Class को System.ComponentModel.Component Class से Derive किया गया है। जिसका मतलब ये है कि ADO.Net Connection Object को किसी ऐसे Environment में Design Time में Hosted किया जा सकता है, जो कि IContainer Interface को Implement करता है क्योंकि किसी Component को किसी ऐसे Container के अन्दर Hosted किया जा सकता है, जिसमें IContainer Interface Implemented है।
Frontend Application का Backend Database के साथ Connection Establish करना सबसे पहला काम होता है। इस काम के Perform हो जाने के बाद हमें अगला काम करना होता है जिसके अन्तर्गत हम एक Command Execute करते हैं जो कि एक प्रकार का SQL Statement होता। Command को हमेंशा किसी Connection पर Execute किया जाता है और क्योंकि एक Command अपने Underlying Data को Change कर सकता है, इसलिए ये जरूरी होता है कि Command Object के साथ किसी प्रकार का Transaction Semantics Associated हो। ADO.NET Architecture के Command Object के बारे में हम अगले Post में विस्तार से समझने की कोशिश करेंगे।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF