What is .NET Data Providers: ADO.NET Connected Objects को Underlying Database के लिए एक Specific Implementation के रूप में Split करता है। अन्य शब्दों में कहें तो यदि हम Frontend को Microsoft SQL Server Database के साथ Connect करना चाहते हैं, तो हमें ADO.NET के SqlConnection Class को Use करना होता है। यानी SQL Server Specific सभी Classes System.Data.SqlClient Namespace के अन्तर्गत Exist होती हैं। इसी तरह से Oracle Database से Connection स्थापित करने से सम्बंधित सभी Classes System.Data.OracleClient Namespace के अन्तर्गत Exist हैं और यदि हम Frontend को Oracle Database के साथ Connect करना चाहें, तो हमें OracleConnection Class को Use करना होता है।
इस तरह से हर Specific Database के साथ Frontend को Connect करने के लिए हमें अलग प्रकार के .NET Data Providers को Use करना होता है और हर तरह का .NET Data Provider एक अलग व Unique प्रकार के Namespace के रूप में ADO.NET Implementation के रूप में Exist होता है। इस Implementation System को हम निम्न चित्र द्वारा बेहतर तरीके से Represent कर सकते हैं:
वर्तमान समय में हम कई प्रकार के Databases को Use कर सकते हैं, जिनमें से File Based Database व Server Based Database वर्तमान समय में काफी Popular हैं। File Based Database को जहां Manage व Deploy करना काफी आसान होता है वहीं Server Based Database ज्यादा Stable व Concurrent तरीके से ज्यादा User Requests को Handle करने में सक्षम होते हैं। हालांकि Microsoft SQL Server 2005 व बाद के Server Based Databases को File Based Database की तरह Communicate किया जा सकता है।
चूंकि वर्तमान समय में बहुत सारे प्रकार के File Based व Server Based DBMS Software Available हैं, इसलिए जरूरी है कि ADO.NET विभिन्न प्रकार के Data Sources को Handle करते हुए Frontend के साथ Backend का Communication करवा सके। यानी विभिन्न प्रकार के Data Sources को Support कर सके।
विभिन्न प्रकार के Data Sources की अपनी अलग तरह की विशेषताऐं होती हैं, अत: ADO.NET एक Specific Type का Provider Model Support करता है, जिसके अन्तर्गत किसी Particular Data Source के लिए Specify किए गए ADO.NET Provider को किसी Specific Namespace के अन्तर्गत Classes के समूह के रूप में Define किया जाता है।
अन्य शब्दों में कहें तो किसी Specific Data Source को .NET Frontend के साथ Use करने के लिए उसका कोई Specific Data Provider होना जरूरी होता है। हालांकि OleDb व ODBC को किसी भी OleDb या ODBC Compliant Database के साथ काम करने के लिए Design किया गया था। लेकिन इनका Specific Implementation भी किसी ना किसी Specific .NET Data Provider में ही Exist होता है। जैसे:
यानी जैसाकि हम उपरोक्त चित्र द्वारा समझ सकते हैं कि सभी प्रकार के Databases को Frontend के साथ Interact करवाने के लिए एक .NET Data Provider की जरूरत होती है और विभिन्न प्रकार के Databases के लिए अलग-अलग प्रकार के .NET Data Providers को ADO.NET Framework में Namespaces के रूप में Implement किया गया है, जिनके माध्यम से किसी Specific Database में Stored Data को Frontend के माध्यम से Implement किया जाता है। विभिन्न प्रकार के Common Data Providers के बारे में हम निम्नानुसार समझ सकते हैं:
Data Source Name | Provider Namespace |
Microsoft SQL Server 7.0 and above | System.Data.SqlClient |
Oracle 8.1.6 and above | System.Data.OracleClient |
SqlXml support in SQL Server | System.Data.SqlXml |
Any ODBC data source | System.Data.ODBC |
Any OleDb data source | System.Data.OleDb |
यहां ध्यान देने वाली बात ये है कि Microsoft SQL Server 7.0 व बाद के Versions तथा Oracle 8.1.6 व बाद के Versions को OleDb व ODBC Data Providers के माध्यम से भी Access किया जा सकता है। इसके अलावा इन्हें इनके Specific Data Providers जैसे कि System.Data.SqlClient व System.Data.OracleClient के माध्यम से भी Access किया जा सकता है।
जब हम किसी Database से Connect होने के लिए उससे सम्बंधित Specific Data Provider को Use करते हैं, तो हमें OleDb या ODBC Data Providers की तुलना में ज्यादा बेहतर Performance प्राप्त होती है। क्योंकि Specialized Data Providers ज्यादा बेहतर Database Specific Functionalities से युक्त होते हैं।
साथ ही Specialized Data Providers हमें Database Specific Data Types के साथ काम करने की सुविधा Provide करते हैं। जिसकी वजह से Boxing/Unboxing Perform नहीं होता और Database की Performance ज्यादा बेहतर रहती है।
लेकिन जब हम Non-Specialized Data Providers जैसे कि OleDb या ODBC Use करते हैं, तब सभी Data Sources, Common Minimum Base Functionality ही Provide करते हैं। ये Data Providers Use करने पर Performance तो प्रभावित होती ही है साथ ही कई अन्य प्रकार के Issues भी Resolve करने पडते हैं।
इसलिए जहां तक सम्भव हो, ADO.Net के माध्यम से किसी Specific Data Provider का प्रयोग करते हुए ही Specific Data Source को Access व Manipulate करना चाहिए तथा ODBC व OleDb का प्रयोग जहां तक सम्भव हो, नहीं करना चाहिए।
यानी यदि Backend Data Source, MS SQL Server हो, तो हमेंशा System.Data.SqlClient.SqlConnection Type का Object System.Data.IDbConnection Interface को Implement करना चाहिए और System.Data.Providerbase.DbConnectionBase से Inherit करना चाहिए। क्योंकि ऐसा करते हुए हम Runtime Cast Errors से बच सकते हैं।
हालांकि इस Approach का एक नुकसान ये है कि हम जिस Backend Database को Use कर रहे हैं, उसे कभी भी Change नहीं कर सकते। जबकि फायदा ये है कि OleDb या ODBC Use करने पर होने वाला Performance Loss नहीं होता।
इसके विपरीत यदि हम Database Independent Code लिखना चाहते हैं, तो हमें OleDb या ODBC Data Providers Use करने पडते हैं, जिससे हम अपने Backend Database को अपनी जरूरत के अनुसार कभी भी Change कर सकते हैं, जबकि ऐसा करने पर हमारे Database की Performance पर विपरीत प्रभाव पडता है।
इसके अलावा हम Base Classes व Interfaces का प्रयोग करते हुए भी Frontend के साथ Backend को Use कर सकते हैं। जहां ADO.NET, Most Common तरीके से Use होने वाले Objects के लिए Standard Interfaces व Base Classes Provide करता है। इसलिए System.Data.SqlClient.SqlConnection Object को System.Data.IDbConnection Interface को Implement करना होता है तथा System.Data.Providerbase.DbConnectionBase को Inherit करना होता है। इन Base Interface द्वारा Represented Data Types या Implement किए गए Interface के साथ प्रक्रिया करते हुए हम Runtime Cast Errors को Avoid कर सकते हैं।
इस Approach का Disadvantage ये है कि हमें हमेंशा Common Minimum Base Functionality के साथ Stick रहना जरूरी होता है, हालांकि ऐसा करने पर भी हमारे Database Interaction के Performance पर किसी तरह का प्रभाव नहीं पडता, जो कि OleDb या ODBC को Use करने पर पडता है।
हम समझ सकते हैं कि उपरोक्तानुसार Discuss किया गया कोई भी तरीका Perfect नहीं है। इसलिए ADO.NET हमें एक और अधिक उपयुक्त Coding तरीका Provide करता है। इस तरीके के अन्तर्गत ADO.NET हमें एक Provider Factory Provide करता है, जिसमें Available Providers को String Variable के रूप में उस स्थिति में Instantiate किया जा सकता है, जबकि हमें Correct Provider Name की जानकारी हो। इस तरीके को ProviderBase Model के नाम से भी जाना जाता है। (What is .NET Data Providers)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF