有一对相同的数据库,每个数据库有80个表:源(Oracle(和目标(SQL Server(。
有一个Powershell 7.x脚本处理数据:它从源读取一个表,在本地DataTable
变量中进行一些简单的处理,并将结果写入目标。冲洗,重复x 80。
使用System.Data.OracleClient.OracleConnection
读取源,使用System.Data.SqlClient.SqlBulkCopy
填充目标
79个表相对较小,完全可以放在内存中,所以我使用System.Data.DataTable.Load()
方法加载它们。
然而,1表在水平方向上非常大(每条记录包含十几兆字节的XML clob(,需要逐行处理,即从源加载、处理、写入目标的单行。
问题是:如何循环遍历System.Data.OracleClient.OracleConnection
数据集中的各个记录,并将它们拉到本地DataTable
对象?我在看System.Data.DataTable.LoadDataRow()
方法,但它似乎没有达到我需要的效果。
不加载DataTable,只需调用ExecuteReader,并将DataReader传递给SqlBulkCopy.WriteToServer.
如果要使用LoadDataRow,请仍然使用ExecuteReader,同时使用rdr。Read((使用rdr。GetValues将行复制到对象数组中,然后可以将其传递给LoadDataRow。