Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SSIS变量超出范围_C#_Ssis - Fatal编程技术网

C# SSIS变量超出范围

C# SSIS变量超出范围,c#,ssis,C#,Ssis,我有一个文件要与使用SSIS项目的数据库中的条目进行比较 在我的ControlFlow中,我有“执行SQL任务”,它从数据库中获取一个结果列表,我想在“脚本任务”中与之进行比较。这里还有其他一些我不知道的事情,但在我完成“脚本任务”之前还有for循环 我第一次运行它时,它工作正常,但一旦它尝试文件中的第二个条目,它就会丢失数据库结果。我可以通过在PreExecute中填充数据库结果来解决这个问题 私有数据表dt=新数据表; 公共覆盖无效预执行 { 基部。预执行; OleDbDataAdapter

我有一个文件要与使用SSIS项目的数据库中的条目进行比较

在我的ControlFlow中,我有“执行SQL任务”,它从数据库中获取一个结果列表,我想在“脚本任务”中与之进行比较。这里还有其他一些我不知道的事情,但在我完成“脚本任务”之前还有for循环

我第一次运行它时,它工作正常,但一旦它尝试文件中的第二个条目,它就会丢失数据库结果。我可以通过在PreExecute中填充数据库结果来解决这个问题

私有数据表dt=新数据表; 公共覆盖无效预执行 { 基部。预执行; OleDbDataAdapter=新OleDbDataAdapter; //将数据库中的结果填充到DataTable对象中 adapter.Filldt,this.Variables.AccountFilterVariables; } 但是现在每次它进入ControlFlow中的循环时,我都会丢失保存在这个.Variables.AccountFilterVariables中的结果

我可以通过将“执行SQL任务”放入循环来解决这个问题,但我不希望它每次都查询数据库。我只想查询数据库一次,并在项目生命周期内保留this.Variables.AccountFilterVariables

我该怎么做?我猜这与PostExecute有关,但我不确定是什么


如果我没记错的话,executesql任务创建的记录集是游标类型的,这意味着您只能读取它一次

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


有关示例代码,请参见我对的回答。

您能弹出一个涉及的控制流和数据流的屏幕截图吗?我想我知道你在做什么,但是一张照片会使我更加坚定。我似乎需要更高的声誉来上传照片,但这里有一个到我的ControlFlow数据流的链接