Saturday, 29 August 2015

DataSet and DataReader

Generally we have a question in our mind, what are the differences between DATASET and DATAREADER and when to us them.
So today we will try to clear your doubt.
DataSet is a collection of in memory tables and datareader provides the ability to expose the data from database.
Both are very widely used in asp.net applications to get/fetch the data from the database. But for a scalable, fast, and reliable application one has to know the best practices in developing application.

DataSet
We should use when the application is:
* Windows application
* Not too large data
* Returning multiple tables
* If, to be serialized
* Disconnected architecture
* To return from a WCF service
* To send across layers
* Caching the data
* Do not need to open or close connection

Code snippet using dataset:
public DataSet GetRecord(Guid id, string procedureName)
{
DataSet resultSet = new DataSet();
SqlConnection connection = new SqlConnection(System.Configuration.
ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand command = new SqlCommand(procedureName, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters["pID"].Value = id.ToString();
IDataAdapter adapter = new SqlDataAdapter(command);
try
{
adapter.Fill(resultSet);
}
catch (Exception ex)
{
throw new PerformanceException(ex.Message, ex.InnerException);
}
return resultSet;
}


DataReader
DataReader is a stream which is readonly and forward only. It fetches the record from databse and stores in the network buffer and gives whenever requests. DataReader releasese the records as query executes and do not wait for the entire query to execute. Therefore it is very fast as compare to the dataset. It releases only when read method is called.
Its usages:
* Web application
* Large data
* Returning multiple tables
* For Fast data access
* Needs explicitly closed
* Output parameter value will only available after close
returns only a row after read

Code sample for DataReader:
public SqlDataReader GetRecord(Guid id, string procedureName)
{
SqlDataReader resultReader = null;
SqlConnection connection = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand command = new SqlCommand(procedureName, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters["pID"].Value = id.ToString();
try
{
connection.Open();
resultReader = command.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
if (resultReader != null || connection.State == ConnectionState.Open)
{
resultReader.Close();
connection.Close();
}
throw new PerformanceException(ex.Message, ex.InnerException);
}
return resultReader;
}


Summary
In this article I try to clear concept of DataSet and DataReader. I hope after reading this article you will be able to use this in your code. I would like to have feedback from my blog readers. Please post your feedback, question, or comments about this article.

No comments:

Post a Comment