SSIS - 转换为 DataTable 的对象变量变空

Dus*_*eat 1 c# ssis etl

我正在尝试创建一个对象变量,该变量将保存来自Execute SQL Task 的集合。该集合将在整个 ETL 包的多个脚本任务中使用。

问题是,在Fill第一个Script Task 的第一个之后,对象变量变空。以下是我如何将变量用于数据表的代码:

try
            {
                DataTable dt = new DataTable();

                OleDbDataAdapter da = new OleDbDataAdapter();

                da.Fill(dt, Dts.Variables["reportMetrics"].Value);

                Dts.TaskResult = (int)ScriptResults.Success;
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
                Dts.TaskResult = (int)ScriptResults.Failure;
            }
Run Code Online (Sandbox Code Playgroud)

在整个ETL包中,Script Task组件都会有这段代码。由于变量在第一个之后变空Fill,因此我无法重用对象变量。

我猜测 Fill 方法与此有关。

谢谢!

小智 5

看起来你的Dts.Variables["reportMetrics"].Value对象持有DataReader对象。该对象允许对数据进行只进只读访问。您不能使用 DataReader 两次填充 DataTable 。要完成您的任务,您需要创建另一个脚本任务,该任务完全执行您在此处描述的操作:它读取 Reader 对象DataTable并将该DataTable对象存储在另一个Dts.Variable对象类型中。

Dts.Variables["reportMetricsTable"].Value = dt

之后,所有后续脚本任务将在修改数据时创建此表的副本,或者在不修改数据时直接使用它。

DataTable dtCopy = (Dts.Variables["reportMetricsTable"].Value as DataTable).Copy()