循环遍历SSIS脚本组件中的列

本文关键字:组件 脚本 遍历 SSIS 循环 | 更新日期: 2023-09-27 18:02:32

我有一个投标项目设置从几个平面文件上传到SQL Server 2008数据库的数据。数据由另一个组织提供。

很多数据都有尾随或前导空格。这是一个足够的问题,它需要我改变我的表中的列的大小来适应。我可以使用派生列来解决这个问题,但是有足够多的列,手动设置这一切是不切实际的。

我试图使用一个脚本组件(转换),从每个字段被上传之前删除前导和尾随空间。然而,这是我第一次尝试使用脚本组件,我没有运气。

尝试一个简单的foreach循环:

foreach(DataColumn i in Row)
  {
      /* do something */
  }

给我一个错误,"foreach语句不能操作'Input0Buffer'类型的变量,因为'Input0Buffer'不包含'GetEnumerator'的公共定义。我需要做些什么来解决这个问题?

循环遍历SSIS脚本组件中的列

脚本组件中的Row不是System.Data.DataRow,而是Input0BufferInput0Buffer直接从ssis包派生,并将列名作为属性。

所以你可以使用GetType(). getproperties()来获取对象上的所有System.Reflection.PropertyInfo,然后遍历它们来做你想做的事情。虽然你必须做一些关于如何使用系统反射来动态地调用属性来修改内容的研究,因为我不知道我的头顶的答案。

using System.Linq;
var properties = Row.GetType().GetProperties().Where(p => !p.Name.EndsWith("_IsNull")).Select(p => p.Name).ToArray();
foreach (var p in properties)
{
    //Do Something
}