Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SqlDataAdapter.Fill() vs DataTable.Load()

I come from this question here but I have a different case. I need my result in a DataTable and I have 2 potential methods:

public static DataTable SelectDataTable(string query, string ConnectionString)
{       
    using (SqlConnection myConnection = new SqlConnection(ConnectionString))
    {
        using (SqlDataAdapter myDataAdapter = new SqlDataAdapter(query, myConnection))
        {
            DataTable dt = new DataTable();
            myDataAdapter.Fill(dt);
            return dt;
        }
    }
}

and

public static DataTable SelectDataTable(string query, string ConnectionString)
{
    using (SqlConnection myConnection = new SqlConnection(ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand(query, myConnection))
        {
            myConnection.Open();
            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));
            return dt;
        }
    }
}

so my question: is there difference between

SqlDataAdapter + Fill() and SqlDataReader + DataTable + Load()

Which of there methods is to prefer?

Joel answer is pretty detailed, what makes this question not a duplicate

In fact I don't use all those mentioned advantages of the SqlDataReader I use it to fill a DataTable and that makes me expecting the answer be like: It's the same?! Unfortunately it's hard to guess what's happening under the hood.

like image 522
Impostor Avatar asked Mar 07 '19 10:03

Impostor


People also ask

What does SqlDataAdapter fill do?

The Fill method of the DataAdapter is used to populate a DataSet with the results of the SelectCommand of the DataAdapter . Fill takes as its arguments a DataSet to be populated, and a DataTable object, or the name of the DataTable to be filled with the rows returned from the SelectCommand .

Which is faster SqlDataReader or SqlDataAdapter?

SqlDataReader will be faster than SQlDataAdapter because it works in a connected state which means the first result is returned from query as soon as its available ..

What is difference between SqlDataReader and SqlDataAdapter?

A SqlDataAdapter is typically used to fill a DataSet or DataTable and so you will have access to the data after your connection has been closed (disconnected access). The SqlDataReader is a fast forward-only and connected cursor which tends to be generally quicker than filling a DataSet/DataTable.

Is there anything faster than SqlDataReader in net?

SqlDataReader is the fastest way. Make sure you use the get by ordinal methods rather than get by column name. e.g. GetString(1);


1 Answers

Unless you are working with big data, I wouldn't expect huge performance gains from using a dataReader as opposed to a dataAdapter.

That being said, the link Pawel posted has a pretty decent write-up explaining the differences and advantages of both.

The main takeaway is readers are for reading data. They do nothing else really than that.

Because they don't do much else, they are relatively low overhead for performance.

DataAdapters are going to allow you to do more than the Readers, but in your case, it sounds like you don't need to do anything other than read in the records.

To reiterate, unless you are working with big data (like hundreds of thousands/millions of rows) I wouldn't expect the performance savings by using the dataReader to be very noticeable.

That is something only you will be able to determine when benchmarking with your own data.

Let us know if that clears up any confusion you may have had about the differences between DataAdapter and DataReader.

like image 128
J. Rockwood Avatar answered Sep 25 '22 03:09

J. Rockwood