如何使用 DataReader 读取数据库记录并将其添加到 DataTable

Posted

技术标签:

【中文标题】如何使用 DataReader 读取数据库记录并将其添加到 DataTable【英文标题】:How to read a database record with a DataReader and add it to a DataTable 【发布时间】:2010-03-22 15:07:04 【问题描述】:

我在 Oracle 数据库表中有一些数据(大约 400 万条记录),我想使用 ADO.NET 将其转换并存储在 MSSQL 数据库中。到目前为止,我使用(对于更小的表)DataAdapter 从 Oracle 数据库中读取数据并将 DataTable 添加到 DataSet 以进行进一步处理。

当我用我的大表尝试这个时,抛出了一个内存不足的异常。 (我假设这是因为我无法将整个表加载到我的内存中):)

现在我正在寻找一种执行此提取/传输/加载的好方法,而无需将整个表存储在内存中。我想使用 DataReader 并读取 DataTable 中的单个 dataRecords。如果其中大约有 100k 行,我想处理它们并在之后清除 DataTable(再次获得可用内存)。

现在我想知道如何使用 ado.net 将单个数据记录作为一行添加到数据表中,以及如何完全清除内存中的数据表:到目前为止我的代码:

Dim dt As New DataTable

    Dim count As Int32
    count = 0
    ' reads data records from oracle database table'
    While rdr.Read()

        'read n records and add them to a dataTable'
        While count < 10000
            dt.Rows.Add(????)

            count = count + 1
        End While

        'transform data in the dataTable, and insert it to the destination'


        ' flush the dataTable after insertion'
        count = 0
    End While

非常感谢您的回复!

【问题讨论】:

见***.com/questions/10844358/… 【参考方案1】:

您可以使用您原来的方法,但在 select 语句中使用 limitskip 分批进行。因此,您一次只需执行 100,000 行并循环,直到获得所有数据。

这样您就不必过多地更改代码

【讨论】:

谢谢。您能否提供一个链接或代码示例来告诉我如何做到这一点?

以上是关于如何使用 DataReader 读取数据库记录并将其添加到 DataTable的主要内容,如果未能解决你的问题,请参考以下文章

DataReader

Datareader 执行动态计算

使用datareader时网络缓冲区可以存储多少数据

如何使用 datareader 从数据表中读取

Sql Datareader 空值

如何使用相同的代码从 DataRow 或 DataReader 中读取数据?