2013-10-24 146 views
1

我有一个文件,我想与我在数据库中使用SSIS项目的条目进行比较。SSIS变量超出范围

在我的ControlFlow中,我有'执行SQL任务',它从我的'脚本任务'中想要比较的数据库中获取结果列表。还有其他的东西在这里发生,我不知道,但有达到我的'脚本任务'之前有循环。

它运行良好,我第一次运行它,但一旦它尝试文件中的第二个条目,它会丢失数据库结果。我可以通过填写PreExecute)每次进入在ControlFlow循环一次,我失去了在this.Variables.AccountFilterVariables举行成果数据库结果(

private DataTable dt = new DataTable(); 

public override void PreExecute() 
{ 
    base.PreExecute(); 

    OleDbDataAdapter adapter = new OleDbDataAdapter(); 
    //filling results from database into DataTable object 
    adapter.Fill(dt, this.Variables.AccountFilterVariables); 

} 

,但现在要解决这个问题

我可以通过将“执行SQL任务”放入循环来修复此问题,但我不希望它每次都查询数据库基础。我只想查询一次数据库并在项目的整个生命周期中保存this.Variables.AccountFilterVariables。

我该怎么做?我猜它与PostExecute()有关,但我不确定是什么。

Control FLow

Data Flow

+0

你可以弹出涉及的控制流和数据流的截图吗?我想我知道你在做什么,但一张图片会固化 – billinkc

+0

似乎我需要更高的声誉来上传照片,但这是一个链接到我的ControlFlow http://i.stack.imgur.com/HFgf8.jpg DataFlow http ://i39.tinypic.com/24zg9r5.jpg – Eamonn

回答

0

如果我没有记错,由执行SQL任务创建的记录是forward-only游标类型,这意味着你只能通过它读取一次。

一个简单的解决方法是在执行SQL任务后立即添加一个脚本任务。在该脚本任务中,使用记录集加载DataTable并将该DataTable存储在另一个程序包范围变量中。然后,在各种循环中,脚本组件可以引用DataTable,默认情况下允许向前和向后寻找。

有关示例代码,请参阅我对SSIS recordset in script task: cannot use it with subsequent rows的回答。