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

ind*_*ild 0 c# ssis-2008

我有一个BIDS项目设置,用于将数据从几个平面文件上传到SQL Server 2008数据库.数据由另一个组织提供.

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

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

尝试一个简单的foreach循环:

foreach(DataColumn i in Row)
  {
      /* do something */
  }
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*att 5

Row在脚本组件中不是一个System.Data.DataRow,而是一个Input0Buffer.它Input0Buffer直接来自您的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
}
Run Code Online (Sandbox Code Playgroud)