DataReader用于清空DataTable的结构

时间:2016-08-24 23:47:36

标签: c# vb.net datatable ado.net

鉴于现有DataReader(在本例中为OleDbDataReader),我可以使用DataTable构建DataTable.Load

// C#
OleDbDataReader dr = SomeMethodThatReturnsADataReader();
var dt = new DataTable();
dt.Load(dr);
' VB.NET
Dim dr As OleDbDataReader = SomeMethodThatReturnsADataReader();
Dim dt = New DataTable()
dt.Load(dr);

但是,这会将DataReader中的数据加载到DataTable

我想创建一个与现有DataTable的结构相匹配的DataReader,但不包含任何数据。

我该怎么做?

修改

经过进一步思考,我知道没有内置方法可以做到这一点。但问题可以分为两部分吗?

  1. DataReader
  2. 中提取架构信息
  3. 将架构信息加载到新的DataTable

1 个答案:

答案 0 :(得分:0)

DataAdapter Class,即OleDbDataAdapter和其他人的基类,拥有受保护的FillSchema Method,可以IDataReader填充空数据表' s架构以匹配读者的字段。

您需要构建一个小实用程序类来使用此功能。

Friend Class ReaderAdapter
    Inherits System.Data.Common.DataAdapter

    Public Function GetTypedTable(dataReader As IDataReader) As DataTable
        Dim ret As New DataTable
        FillSchema(ret, Data.SchemaType.Source, dataReader)
        Return ret
    End Function
End Class

使用示例:

Dim rdr As OleDb.OleDbDataReader = cmd.ExecuteReader
Dim ra As New ReaderAdapter()
Dim emptyTypedTable As DataTable = ra.GetTypedTable(rdr)