Provider, Adapter, Reader, Command Builder

ADO.NET का काम objects की एक छोटी cast share करती है: एक data provider एक specific database से connect होता है, एक Connection line खोलता है, एक Command आपका SQL carry करता है, एक DataReader rows वापस stream करता है, और एक CommandBuilder वाला एक DataAdapter एक DataSet fill और update करता है।

10 min read · 8 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


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

ObjectRole
Data Providerएक kind के database के लिए classes का एक set (SQL Server के लिए SqlClient, others के लिए OleDb)
Connectionएक connection string इस्तेमाल करते हुए database तक link open और close करता है
Commandएक SQL statement (या stored procedure) hold करता है और इसे चलाता है
DataReaderRows वापस stream करता है, forward-only और read-only (connected model)
DataAdapterDatabase और एक DataSet के बीच bridge: load के लिए Fill, save के लिए Update
CommandBuilderINSERT, 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 back

Quiz

ADO.NET में, कौन से object का job आपका SQL statement hold करना और इसे database के against execute करना है?

  1. Connection, क्योंकि यह SQL चलाता है
  2. Command, जो एक SQL statement या stored procedure hold करता है और इसे execute करता है
  3. DataReader, क्योंकि यह SQL भेजता है
  4. 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 लिखता है।

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Database Access and Client-Server Communications

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati