In this article I will explain how to convert / copy DataReader (SqlDataReader) data to DataTable and DataSet using C# and VB.Net.
The DataTable and DataSet will be populated with records from the DataReader using Load method of the DataTable.
 
Database
I have made use of the following table Customers with the schema as follows.
Convert / Copy DataReader to DataTable and DataSet C# and VB.Net
I have already inserted few records in the table.
Convert / Copy DataReader to DataTable and DataSet C# and VB.Net
 
Note: You can download the database table SQL by clicking the download link below.
          Download SQL file
 
 
Namespaces
You will need to import the following namespaces.
C#
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
 
VB.Net
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
 
 
Converting DataReader to DataTable using C# and VB.Net
The records from the Customers table are fetched using SqlDataReader. Finally a new DataTable is created and the DataReader records are loaded into the DataTable using its Load method.
C#
protected void ConvertDataReaderToDataTable(object sender, EventArgs e)
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT CustomerId, Name, Country FROM Customers"))
        {
            cmd.Connection = con;
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                //Create a new DataTable.
                DataTable dtCustomers = new DataTable("Customers");
 
                //Load DataReader into the DataTable.
                dtCustomers.Load(sdr);
            }
            con.Close();
        }
    }
}
 
VB.Net
Protected Sub ConvertDataReaderToDataTable(sender As Object, e As EventArgs)
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand("SELECT CustomerId, Name, Country FROM Customers")
            cmd.Connection = con
            con.Open()
            Using sdr As SqlDataReader = cmd.ExecuteReader()
                'Create a new DataTable.
                Dim dtCustomers As New DataTable("Customers")
 
                'Load DataReader into the DataTable.
                dtCustomers.Load(sdr)
            End Using
           con.Close()
        End Using
    End Using
End Sub
 
The following screenshot displays the DataTable with records copied from the DataReader.
Convert / Copy DataReader to DataTable and DataSet C# and VB.Net
 
 
Converting DataReader to DataSet using C# and VB.Net
The records from the Customers table are fetched using SqlDataReader. Then a new DataSet is created and a DataTable is added to the DataSet.
Finally the DataReader records are loaded into the DataTable of the DataSet using its Load method.
C#
protected void ConvertDataReaderToDataSet(object sender, EventArgs e)
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT CustomerId, Name, Country FROM Customers"))
        {
            cmd.Connection = con;
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                //Create a new DataSet.
                DataSet dsCustomers = new DataSet();
                dsCustomers.Tables.Add("Customers");
 
                //Load DataReader into the DataTable.
                dsCustomers.Tables[0].Load(sdr);
            }
            con.Close();
        }
    }
}
 
VB.Net
Protected Sub ConvertDataReaderToDataSet(sender As Object, e As EventArgs)
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand("SELECT CustomerId, Name, Country FROM Customers")
            cmd.Connection = con
            con.Open()
            Using sdr As SqlDataReader = cmd.ExecuteReader()
                'Create a new DataSet.
                Dim dsCustomers As New DataSet()
                dsCustomers.Tables.Add("Customers")
 
                'Load DataReader into the DataTable.
                dsCustomers.Tables(0).Load(sdr)
            End Using
            con.Close()
        End Using
    End Using
End Sub
 
The following screenshot displays the DataTable of the DataSet with records copied from the DataReader.
Convert / Copy DataReader to DataTable and DataSet C# and VB.Net
 
 
Downloads

Download Code