我正在尝试创建一个对象变量,该变量将保存来自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()
| 归档时间: |
|
| 查看次数: |
14691 次 |
| 最近记录: |