2015-05-19 81 views
0

谢谢你回答这个问题。ssis错误:在foreach循环容器中的foreach

我检查变量是否包含null,但它不是null的原因。

今天,我找出为什么不能工作。 因为我在变量映射中设置的变量也与集合一样。所以第一个循环有效,但下一个循环不起作用。

当我在变量映射中设置不同的变量时,它完全工作。

我对不小心的错误表示歉意。


我使用SSIS 2008 我从文本文件中的两个类型的数据,日期(4/1,4/2,4/3)和数量(10,20,30)。

我在数组和对象类型的变量中输入它们。

我试图通过使用foreach循环容器来循环它们。我把数组放在枚举器中的变量。我确认它循环并使用msgbox显示消息4/1,4/2,4/3。它成功的循环。

我尝试通过上面相同的方式循环编号的不同变量。它成功显示10,20,30。

howwever,我在数字的foreach容器中设置日期的foreach循环容器。 msgbox首先显示10 4/1,10 4/2,10 4/3,但接下来是空消息,则发生错误

错误:ForEach枚举器的GetEnumerator方法失败,错误为0x80131509“(空值)”。这发生在ForEach枚举器无法枚举时。

更多信息,当调试时,两个foreach循环容器是红色的,但是两个容器中msgbox的脚本任务是绿色的。

我想知道为什么以及如何解决问题。

回答

0

我查看了您更新的问题,原因肯定是由于您试图枚举包含NULL的对象变量。正如您在脚本任务中应用消息框时所述,其中一个值为“空”,即发生错误并且ForEach循环变为红色时。 ForEach循环更改为Red,因为它无法枚举NULL。

有两个选项用于解决此问题:

  1. 在点值分配到对象变量(它是一个数组),应用检查空值的条件。如果不是NULL,则添加或插入对象(数组)变量。
  2. 在嵌套的ForEach循环中应用表达式,该循环使用内置函数来检查null并将其更改为类似于0(零)的内容。您可能需要在ForEachEnumerator属性上应用表达式,以便发送到变量映射的值不是NULL。这将需要一些实验。

如果您正在从数据库表中读取数据,那么使用SQL语句应用ISNULL函数来检查NULL并将其更改为其他数据很容易解决。在你的情况下,你正在从一个文本文件中读取数据,并且需要找到一种通过编程方式对C#或VB.NET执行相同操作的方法,以便将一个值数组如何保存到对象变量中。

希望这会有所帮助。如果有帮助,请将我的回答标记为已回答您的问题。谢谢。