Theory
ADO.NET Objects की Cast
ADO.NET अपना काम objects के एक handful से करता है, हर एक का एक clear role है। एक बार आप जान लें कौन क्या करता है, code एक छोटी play जैसा पढ़ता है: connect, command, read, या fill।
यह lesson cast नाम देता है, provider, Connection, Command, DataReader, DataAdapter और CommandBuilder, और दिखाता है ये कैसे cooperate करके FestConnect के data को database और आपके code के बीच move करते हैं। Roles सीखिए और जो code आगे आता है वह immediate sense बनाएगा।
At a glance
| Object | Role |
|---|---|
| Data Provider | एक kind के database के लिए classes का एक set (SQL Server के लिए SqlClient, others के लिए OleDb) |
| Connection | एक connection string इस्तेमाल करते हुए database तक link open और close करता है |
| Command | एक SQL statement (या stored procedure) hold करता है और इसे चलाता है |
| DataReader | Rows वापस stream करता है, forward-only और read-only (connected model) |
| DataAdapter | Database और एक DataSet के बीच bridge: load के लिए Fill, save के लिए Update |
| CommandBuilder | INSERT, UPDATE और DELETE commands auto-generate करता है जो एक DataAdapter को changes save करने के लिए चाहिए |
Theory
Providers: आपके Database के लिए सही Classes
एक data provider इन classes का एक family है जो एक kind के database के लिए written है। SQL Server के लिए आप SqlClient provider इस्तेमाल करते हैं, जिसके objects SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter नाम के हैं। दूसरे databases के लिए OleDb provider है (OleDbConnection, और ऐसे और)।
Providers के across roles identical हैं; सिर्फ़ prefix बदलता है। SqlClient से pattern एक बार सीखिए और आप provider switch करके किसी भी supported database से बात कर सकते हैं। FestConnect, SQL Server पर, throughout SqlClient इस्तेमाल करता है।
Theory
ये कैसे Cooperate करते हैं
एक quick read के लिए (connected): Connection line open करता है, एक Command आपका SELECT carry करता है, और ExecuteReader call करना एक DataReader return करता है जिससे आप rows stream करते हैं, फिर आप close करते हैं।
एक in-memory copy के लिए (disconnected): एक DataAdapter एक Command को wrap करता है, और इसका Fill method connection open करता है, rows को एक DataSet में load करता है, और आपके लिए connection close करता है। बाद में, इसका Update method changes वापस save करता है, और एक CommandBuilder वे INSERT, UPDATE और DELETE commands generate कर सकता है जो Update को चाहिए, तो आपको इन्हें hand से लिखना नहीं पड़ता।
Practical
The two patterns in outline
// Connected: Connection -> Command -> DataReader
using (var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("SELECT Name FROM Events", conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader(); // stream rows
while (reader.Read()) { /* use reader["Name"] */ }
} // connection closed automatically
// Disconnected: DataAdapter fills a DataSet, then closes
var adapter = new SqlDataAdapter("SELECT * FROM Events", connectionString);
var ds = new DataSet();
adapter.Fill(ds); // opens, loads into memory, closes for you
// work with ds in memory; adapter.Update(ds) saves changes backQuiz
ADO.NET में, कौन से object का job आपका SQL statement hold करना और इसे database के against execute करना है?
- Connection, क्योंकि यह SQL चलाता है
- Command, जो एक SQL statement या stored procedure hold करता है और इसे execute करता है
- DataReader, क्योंकि यह SQL भेजता है
- CommandBuilder, क्योंकि इसके नाम में 'Command' है
Show the answer
Command, जो एक SQL statement या stored procedure hold करता है और इसे execute करता है
Command object एक SQL statement (या stored procedure) hold करता है और इसे execute करता है, एक SELECT के लिए ExecuteReader के through, INSERT/UPDATE/DELETE के लिए ExecuteNonQuery, या एक single value के लिए ExecuteScalar। Option A wrong है: Connection सिर्फ़ database तक link open और close करता है; यह आपका SQL carry या run नहीं करता। Option C wrong है: DataReader एक Command produce करता rows RECEIVE और stream करता है; यह SQL नहीं भेजता। Option D नाम पर एक trap है: CommandBuilder आपकी query नहीं चलाता, यह वे INSERT/UPDATE/DELETE commands auto-generate करता है जो एक DataAdapter को changes save करने के लिए चाहिए। हर object का एक role है: Connection connects करता है, Command commands करता है, Reader reads करता है।
Think first
CommandBuilder Actually आपको किससे बचाता है?
एक DataAdapter अपने आप एक DataSet Fill कर सकता है। तो CommandBuilder किसलिए है, और यह convenient क्यों है? फिर tap कीजिए।
Show the answer
एक DataAdapter सिर्फ़ एक SELECT से READ कर सकता है, पर changes वापस SAVE करने के लिए, इसके Update method को तीन और commands चाहिए: नई rows के लिए एक INSERT, changed rows के लिए एक UPDATE, और removed rows के लिए एक DELETE। वे तीन SQL statements hand से लिखना, हर column और key match करते हुए, tedious और error-prone है। CommandBuilder आपका SELECT inspect करता है और आपके लिए वे INSERT, UPDATE और DELETE commands AUTO-GENERATE करता है, तो Update बस बिना आपके इन्हें लिखे काम करता है। यही convenience है: एक simple single-table scenario के लिए, आप एक CommandBuilder attach करते हैं और adapter DataSet से edits, insertions और deletions को सीधा database में वापस save कर सकता है। Trade-off यह है कि यह सिर्फ़ straightforward cases handle करता है (एक table, एक defined key); complex queries या joins के लिए आप अभी भी commands खुद लिखते हैं, अक्सर stored procedures की तरह। तो CommandBuilder common simple case के लिए एक time-saver है, एक universal tool नहीं। यह boring SQL लिखता है ताकि आपको न लिखना पड़े।
Summary
Key takeaways
- ADO.NET एक छोटी cast के through काम करता है: provider, Connection, Command, DataReader, DataAdapter, CommandBuilder।
- एक data provider एक database kind के लिए class family है: SQL Server के लिए SqlClient, others के लिए OleDb; सिर्फ़ prefix बदलता है।
- Connection link open और close करता है (एक connection string से); Command आपका SQL hold और execute करता है।
- Command execution: SELECT के लिए ExecuteReader, INSERT/UPDATE/DELETE के लिए ExecuteNonQuery, एक value के लिए ExecuteScalar।
- DataReader connected model में rows stream करता है; DataAdapter का Fill एक DataSet load करता है और Update disconnected model में changes save करता है।
- एक CommandBuilder वे INSERT, UPDATE और DELETE commands auto-generate करता है जो एक DataAdapter को simple changes save करने के लिए चाहिए।
- Memory hook: Connection connects करता है, Command commands करता है, Reader reads करता है, Adapter fills करता है, Builder boring SQL लिखता है।