SSIS脚本任务 - 在循环中读取RecordSet对象失败

时间:2014-08-11 22:17:14

标签: ssis

我收集了一个数据集,并使用RecordSet目标将其分配给一个对象变量。

根据数据集中的记录数量,我需要遍历数据集并将记录吐出到文件中。例如,如果原始数据集中有5000条记录,我需要循环5次以创建包含1000条记录的文件,名为MyFile_1.txt,MyFile_2.txt等。

在数据流中的脚本组件任务中,我使用RecordSet中的列填充输出缓冲区。在这样做的过程中,我创建了一个新的OleDbAdapter和DataTable,然后用对象变量填充它们。

第一次这很棒。但是,第二次,DataAdapter.Fill(DataTable,ObjectVariable)方法执行时没有错误,但DataTable中没有行。在调试时,我可以深入查看Object变量中是否还有记录。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是一个有效的脚本任务。它需要引用Microsoft ActiveX Data Objects 2.x

public void Main()
        {

            OleDbDataAdapter da = new OleDbDataAdapter();
            DataTable dt = new DataTable();

            ADODB.Stream stm = new  ADODB.Stream();
            ADODB.Recordset rs = ((ADODB.Recordset)Dts.Variables["User::Variable"].Value).Clone();
            ADODB.Recordset rsCopy = new ADODB.Recordset();

            rs.Save(stm);
            rsCopy.Open(stm);
            da.Fill(dt, rs);
            dt.Clear();
            da.Fill(dt, rsCopy);
            Dts.TaskResult = (int)ScriptResults.Success;
        }

您可以根据需要多次将数据从流中提取到新记录集中。