Export (0) Print
Expand All

DataSet.CreateDataReader Method

Returns a DataTableReader with one result set per DataTable, in the same sequence as the tables appear in the Tables collection.

This member is overloaded. For complete information about this member, including syntax, usage, and examples, click a name in the overload list.

  Name Description
Public method CreateDataReader Returns a DataTableReader with one result set per DataTable, in the same sequence as the tables appear in the Tables collection.
Public method CreateDataReader(DataTable()) Returns a DataTableReader with one result set per DataTable.
Top

In order to ensure the order of the result sets within the returned DataTableReader, if a DataTable within the DataSet is empty, it will be represented by an empty result set within the returned DataTableReader.

This example, a Console application, creates three DataTable instances and adds each to a DataSet. The example calls the CreateDataReader method and displays the contents of the returned DataTableReader. Note that the order of the result sets in the DataTableReader is controlled by the order of the DataTable instances passed as parameters.

Note Note

This example shows how to use one of the overloaded versions of CreateDataReader. For other examples that might be available, see the individual overload topics.

Private emptyTable As DataTable
Private customerTable As DataTable
Private productTable As DataTable

Sub Main()
  Dim dataSet As New DataSet
  ' Add some DataTables to the DataSet, including 
  ' an empty DataTable:

  emptyTable = New DataTable()
  productTable = GetProducts()
  customerTable = GetCustomers()

  dataSet.Tables.Add(customerTable)
  dataSet.Tables.Add(emptyTable)
  dataSet.Tables.Add(productTable)
  TestCreateDataReader(dataSet)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub 

Private Sub TestCreateDataReader(ByVal dataSet As DataSet)
  ' Given a DataSet, retrieve a DataTableReader 
  ' allowing access to all the DataSet's data. 
  ' Even though the dataset contains three DataTables, 
  ' this code will only display the contents of two of them, 
  ' because the code has limited the results to the  
  ' DataTables stored in the tables array. Because this 
  ' parameter is declared using the ParamArray keyword,  
  ' you could also include a list of DataTable instances  
  ' individually, as opposed to supplying an array of  
  ' DataTables, as in this example: 
  Using reader As DataTableReader = _
      dataSet.CreateDataReader(productTable, emptyTable)
    Do 
      If Not reader.HasRows Then
        Console.WriteLine("Empty DataTableReader")
      Else
        PrintColumns(reader)
      End If
      Console.WriteLine("========================")
    Loop While reader.NextResult()
  End Using 
End Sub 

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order 
  ' to demonstrate the behavior of the DataTableReader. 
  Dim table As New DataTable

  ' Create two columns, ID and Name. 
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function 

Private Function GetProducts() As DataTable
  ' Create sample Products table, in order 
  ' to demonstrate the behavior of the DataTableReader. 
  Dim table As New DataTable

  ' Create two columns, ID and Name. 
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Wireless Network Card"})
  table.Rows.Add(New Object() {2, "Hard Drive"})
  table.Rows.Add(New Object() {3, "Monitor"})
  table.Rows.Add(New Object() {4, "CPU"})
  table.AcceptChanges()
  Return table
End Function 

Private Sub PrintColumns( _
   ByVal reader As DataTableReader)

  ' Loop through all the rows in the DataTableReader. 
  Do While reader.Read()
    For i As Integer = 0 To reader.FieldCount - 1
      Console.Write(reader(i).ToString() & " ")
    Next
    Console.WriteLine()
  Loop 
End Sub

The example displays the following code in the Console window:

Show:
© 2014 Microsoft