【发布时间】:2010-02-22 19:53:45
【问题描述】:
SSIS 2005:我有一个 DataFlow 任务,其中包含一个 IDataReader 源,它从 Oracle 数据源获取零个或多个行并将这些行推送到用作目标的脚本组件。我的目标是将这些记录加载到数据集中,因此我重写脚本组件的 PreExecute 方法来构建数据集和将保存记录的子数据表。然后在 InputRow 方法中向 DataSet 添加一行,在 PostExecute 方法中将 DataSet 加载到 ReadWriteVariable 中。
我的问题是,如果从 IDataReader 返回零行并且我从 C# 代码(使用 Dts 对象模型)启动包,则 DataSet 永远不会在 ReadWriteVariable 中设置。如果我更改查询以便始终将行返回到 IDataReader,则 DataSet 将加载到变量中,但如果返回零行,则变量仍然只是一个简单的 System.Object。
令人沮丧的部分是,如果我在我的 PreExecute 和 PostExecute 方法中添加一些 System.Windows.Forms.MessageBox.Show() 调用并从 VisualStudio 运行包,则会出现消息。在将脚本组件设置为 DataSet 并返回 MessageBox 中的 DataTables 计数之后,我什至还检查了脚本组件中的变量。每次在设计器中都能正常工作。
有人可以解释为什么当我以编程方式运行包时 PostExecute 方法似乎没有被触发,而当我从设计器运行它时它工作得很好?这是在 DataFlow 任务中进行的一些优化吗?理想情况下,如果没有返回记录,我希望看到一个空的 DataSet 放入变量中。
提前致谢。
【问题讨论】:
标签: ssis