C# Language
डेटाबेस तक पहुँच
खोज…
ADO.NET कनेक्शन
ADO.NET Connections C # एप्लिकेशन से डेटाबेस से कनेक्ट करने के सबसे सरल तरीकों में से एक है। वे एक प्रदाता और एक कनेक्शन स्ट्रिंग के उपयोग पर भरोसा करते हैं जो आपके डेटाबेस को प्रश्नों के खिलाफ प्रदर्शन करने के लिए इंगित करता है।
सामान्य डेटा प्रदाता कक्षाएं
निम्नलिखित में से कई ऐसी कक्षाएं हैं जो आमतौर पर डेटाबेस और उनके संबंधित नामस्थानों को क्वेरी करने के लिए उपयोग की जाती हैं:
-
SqlConnection
,SqlCommand
,SqlDataReader
System.Data.SqlClient
-
OleDbConnection
,OleDbCommand
,OleDbDataReader
System.Data.OleDb
-
MySqlConnection
,MySqlCommand
,MySqlDbDataReader
सेMySql.Data
ये सभी आमतौर पर C # के माध्यम से डेटा तक पहुंचने के लिए उपयोग किए जाते हैं और आमतौर पर डेटा-केंद्रित अनुप्रयोगों के निर्माण के दौरान सामना किया जाएगा। कई अन्य वर्गों का उल्लेख नहीं किया गया है जो एक ही FooConnection
, FooCommand
, FooDataReader
वर्गों को लागू करते हैं उसी तरह का व्यवहार करने की उम्मीद की जा सकती है।
ADO.NET कनेक्शन के लिए सामान्य एक्सेस पैटर्न
एक सामान्य पैटर्न जिसका उपयोग ADO.NET कनेक्शन के माध्यम से आपके डेटा तक पहुँचते समय किया जा सकता है, इस प्रकार दिख सकता है:
// This scopes the connection (your specific class may vary)
using(var connection = new SqlConnection("{your-connection-string}")
{
// Build your query
var query = "SELECT * FROM YourTable WHERE Property = @property");
// Scope your command to execute
using(var command = new SqlCommand(query, connection))
{
// Open your connection
connection.Open();
// Add your parameters here if necessary
// Execute your query as a reader (again scoped with a using statement)
using(var reader = command.ExecuteReader())
{
// Iterate through your results here
}
}
}
या यदि आप केवल एक सरल अद्यतन कर रहे थे और उसे रीडर की आवश्यकता नहीं थी, तो वही मूल अवधारणा लागू होगी:
using(var connection = new SqlConnection("{your-connection-string}"))
{
var query = "UPDATE YourTable SET Property = Value WHERE Foo = @foo";
using(var command = new SqlCommand(query,connection))
{
connection.Open();
// Add parameters here
// Perform your update
command.ExecuteNonQuery();
}
}
आप सामान्य इंटरफेस के एक सेट के खिलाफ भी कार्यक्रम कर सकते हैं और प्रदाता विशिष्ट वर्गों के बारे में चिंता करने की ज़रूरत नहीं है। ADO.NET द्वारा प्रदान किए गए मुख्य इंटरफेस हैं:
- IDbConnection - डेटाबेस कनेक्शन के प्रबंधन के लिए
- IDbCommand - SQL कमांड चलाने के लिए
- IDbTransaction - लेनदेन के प्रबंधन के लिए
- IDataReader - कमांड द्वारा लौटाए गए डेटा को पढ़ने के लिए
- IDataAdapter - डेटासेट से और डेटा को प्रसारित करने के लिए
var connectionString = "{your-connection-string}";
var providerName = "{System.Data.SqlClient}"; //for Oracle use "Oracle.ManagedDataAccess.Client"
//most likely you will get the above two from ConnectionStringSettings object
var factory = DbProviderFactories.GetFactory(providerName);
using(var connection = new factory.CreateConnection()) {
connection.ConnectionString = connectionString;
connection.Open();
using(var command = new connection.CreateCommand()) {
command.CommandText = "{sql-query}"; //this needs to be tailored for each database system
using(var reader = command.ExecuteReader()) {
while(reader.Read()) {
...
}
}
}
}
इकाई फ्रेमवर्क कनेक्शन
एंटिटी फ्रेमवर्क एब्सट्रैक्शन कक्षाओं को उजागर करता है जो कि DbContext
जैसी कक्षाओं के रूप में अंतर्निहित डेटाबेस के साथ बातचीत करने के लिए उपयोग किया जाता है। इन संदर्भों में आमतौर पर DbSet<T>
गुण शामिल होते हैं जो उपलब्ध संग्रह को उजागर करते हैं जिन्हें DbSet<T>
किया जा सकता है:
public class ExampleContext: DbContext
{
public virtual DbSet<Widgets> Widgets { get; set; }
}
DbContext
स्वयं डेटाबेस के साथ कनेक्शन बनाने का काम करेगा और आमतौर पर कनेक्शन को स्थापित करने के तरीके को निर्धारित करने के लिए कॉन्फ़िगरेशन से उपयुक्त कनेक्शन स्ट्रिंग डेटा को पढ़ेगा:
public class ExampleContext: DbContext
{
// The parameter being passed in to the base constructor indicates the name of the
// connection string
public ExampleContext() : base("ExampleContextEntities")
{
}
public virtual DbSet<Widgets> Widgets { get; set; }
}
कार्यकारी इकाई रूपरेखा क्वेरी
वास्तव में एक इकाई फ्रेमवर्क क्वेरी को निष्पादित करना काफी आसान हो सकता है और बस आपको संदर्भ की एक आवृत्ति बनाने की आवश्यकता होती है और फिर अपने डेटा को खींचने या उपयोग करने के लिए उस पर उपलब्ध गुणों का उपयोग करें।
using(var context = new ExampleContext())
{
// Retrieve all of the Widgets in your database
var data = context.Widgets.ToList();
}
एंटिटी फ्रेमवर्क एक व्यापक परिवर्तन-ट्रैकिंग प्रणाली भी प्रदान करता है जिसका उपयोग डेटाबेस में परिवर्तन को धकेलने के लिए केवल SaveChanges()
विधि को कॉल करके अपने डेटाबेस में प्रविष्टियों को अद्यतन करने के लिए किया जा सकता है:
using(var context = new ExampleContext())
{
// Grab the widget you wish to update
var widget = context.Widgets.Find(w => w.Id == id);
// If it exists, update it
if(widget != null)
{
// Update your widget and save your changes
widget.Updated = DateTime.UtcNow;
context.SaveChanges();
}
}
कनेक्शन स्ट्रिंग्स
एक कनेक्शन स्ट्रिंग एक स्ट्रिंग है जो एक विशेष डेटा स्रोत के बारे में जानकारी निर्दिष्ट करता है और क्रेडेंशियल्स, स्थान और अन्य जानकारी संग्रहीत करके इसे कनेक्ट करने के बारे में कैसे जाना है।
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
आपका कनेक्शन स्ट्रिंग संग्रहीत करना
आमतौर पर, एक कनेक्शन स्ट्रिंग को एक कॉन्फ़िगरेशन फ़ाइल (जैसे कि एक ऐप app.config
या web.config
ASP.NET के भीतर) में संग्रहीत किया जाएगा। निम्नलिखित एक उदाहरण है कि इन फ़ाइलों में से एक में स्थानीय कनेक्शन कैसा दिख सकता है:
<connectionStrings>
<add name="WidgetsContext" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Database=Widgets;Integrated Security=True;"/>
</connectionStrings>
<connectionStrings>
<add name="WidgetsContext" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Database=Widgets;Integrated Security=SSPI;"/>
</connectionStrings>
यह आपके एप्लिकेशन को WidgetsContext
माध्यम से कनेक्शन स्ट्रिंग को एक्सेस करने की अनुमति देगा। यद्यपि दोनों Integrated Security=SSPI
और Integrated Security=True
एक ही कार्य करते हैं; Integrated Security=SSPI
को तब से पसंद किया जाता है जब SQLClient & OleDB प्रदाता दोनों के साथ काम करता है, जहाँ Integrated Security=true
OleDb प्रोवाइडर के साथ इस्तेमाल होने पर एक अपवाद फेंकता है।
विभिन्न प्रदाताओं के लिए अलग कनेक्शन
प्रत्येक डेटा प्रदाता (SQL सर्वर, MySQL, Azure, आदि) सभी अपने कनेक्शन स्ट्रिंग्स के लिए सिंटैक्स के अपने स्वाद की सुविधा देते हैं और विभिन्न उपलब्ध गुणों को उजागर करते हैं। यदि आप अपने जैसा दिखना चाहिए, इसके बारे में अनिश्चित हैं तो ConnectionStrings.com एक अविश्वसनीय रूप से उपयोगी संसाधन है।