DataSet and DataReader are two common components of ADO.NET that are used to get and store data in a C# application. Let's learn the difference between the two and when to use a DataSet vs a DataReader.
DataReader
- The ADO.NET DataReader is used to retrieve read-only (cannot update data back to a datasource) and forward-only (cannot read backward/random) data from a database.
- Using of a DataReader increases application performance and reduces system overheads. This is due to one row at a time is stored in memory.
- You create a DataReader by calling Command.ExecuteReader after creating an instance of the Command object.
- This is a connected architecture: The data is available as long as the connection with database exists.
- You need to open and close the connecton manually in code.
The following code statement is used to retrieve rows from a data source.
-
- conn.open();
- string SQLquery = "SELECT CustomerID, CompanyName FROM dbo.Customers";
- SqlCommand cmd = new SqlCommand(SQLquery, conn);
-
- SqlDataReader myReader = cmd.ExecuteReader();
-
- while(myReader.Read())
- {
- Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
- }
-
- myReader.Close();
-
- conn.close();
Here are detailed tutorials on DataReader:
DataSet
- The DataSet is a in-memory representation of data.
- It can be used with multiple data sources. That is A single DataSet can hold the data from different data sources holdng data from different databases/tables.
- The DataSet represents a complete set of data including related tables, constraints, and relationships among the tables.
- The DataSet can also persist and reload its contents as XML and its schema as XML Schema definition language (XSD) schema.
- The DataAdapter acts as a bridge between a DataSet and a data source for retrieving and saving data.
- The DataAdapter helps mapping the data in the DataSet to match the data in the data source.
- Also, Upon an update of dataset, it allows changing the data in the data source to match the data in the DataSet.
- No need to manually open and close connection in code.
- Hence, point (8) says that it is a disconnected architecture. Fill the data in DataSet and that's it. No connection existence required
The following code statement is used to retrieve rows from a data source.
- string SQLquery = "SELECT CustomerID, CompanyName FROM dbo.Customers";
-
- DataSet ds = new DataSet("CustomerDataSet");
-
- SqlDataAdapter myAdapter = new SqlDataAdapter(SQLquery, conn);
-
- myAdapter.Fill(ds,"CustomersTable");
Learn more: