नोट: यह उत्तर प्रासंगिक है यदि आप ORM (जैसे Entity Framework या NHibernate) या LINQ से SQL के बजाय मूल ADO.NET 2 कार्यक्षमता का उपयोग करने का निर्णय लेते हैं।
आइए मान लें कि आपके पास app.config
. में परिभाषित एक कनेक्शन स्ट्रिंग है :
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
providerName
. की उपस्थिति पर ध्यान दें विशेषता और उसका मूल्य। आप किसी अन्य डीबी प्रदाता के लिए एक मूल्य भी डाल सकते हैं, उदा। System.Data.SQLite
।
(ध्यान दें कि गैर-मानक प्रदाता, यानी वे जो डिफ़ॉल्ट रूप से .NET फ्रेमवर्क में नहीं हैं, उन्हें पहले app.config
में पंजीकृत होना चाहिए। या क्लाइंट मशीन के machine.config
. में ।)
अब, आप निर्दिष्ट डेटाबेस के साथ पूरी तरह से प्रदाता-अज्ञेय फैशन में निम्नानुसार काम कर सकते हैं:
using System.Configuration; // for ConfigurationManager
using System.Data; // for all interface types
using System.Data.Common; // for DbProviderFactories
var cs = ConfigurationManager.ConnectionStrings["SomeConnection"];
// ^^^^^^^^^^^^^^^^
var factory = DbProviderFactories.GetFactory(cs.ProviderName);
// ^^^^^^^^^^^^^^^
using (IDbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = cs.ConnectionString;
// ^^^^^^^^^^^^^^^^^^^
connection.Open();
try
{
using (IDbCommand command = connection.CreateCommand())
{
... // do something with the database
}
}
finally
{
connection.Close();
}
}
ध्यान दें कि यह कोड केवल इंटरफ़ेस प्रकारों के साथ कैसे काम करता है। एकमात्र स्थान जहां आप किसी विशेष DB प्रदाता को इंगित करते हैं वह providerName
. के माध्यम से होता है app.config
. में विशेषता मान फ़ाइल। (मैंने उन सभी स्थानों को चिह्नित किया है जहां app.config
. से एक सेटिंग है ^^^
. के साथ लिया जाता है स.)
आगे पढ़ना:
-
ADO.NET 2.0 बेस क्लास और फ़ैक्टरियों के साथ जेनेरिक कोडिंग:
मेरे उत्तर के समान, लेकिन अधिक विवरण में जाता है। -
ADO.NET प्रबंधित प्रदाता और डेटासेट डेवलपर केंद्र:
अन्य बातों के अलावा, उपलब्ध ADO.NET डेटाबेस प्रदाताओं की एक अनुक्रमणिका शामिल है।