2010-11-18 136 views
2

我目前正在处理字段中具有'\ 0'字符的数据库。SSIS脚本组件删除CHAR(n)字段中的' 0'字符

例如,该字段

Category CHAR(4) 

有时具有值 '\ 0 \ 0 \ 0 \ 0'(4零个字符)和有时 ''(4个空白字符)

我想使用一个脚本组件,用于将这个问题的所有字段个性化。 我写了下面的脚本,但它不起作用,因为C#将'\ 0 \ 0 \ 0 \ 0'转换为空字符串。

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    Type rowType = Row.GetType(); 

    foreach (IDTSInputColumn100 column in ComponentMetaData.InputCollection[0].InputColumnCollection) 
    { 
     PropertyInfo columnValue = rowType.GetProperty(column.Name.Replace("_", "")); 
     Object obj = columnValue.GetValue(Row, null); 
     if (obj is string) 
     { 
      string s = (string)obj; 
      StringBuilder sb = new StringBuilder(); 
      foreach (char c in s) 
      { 
       if (c < ' ') 
       { 
        sb.Append(' '); 
       } 
       else 
        sb.Append(c); 
      } 
      columnValue.SetValue(Row, sb.ToString(), null); 
     } 
    } 
} 

是否有可能到外地转换为字节数组,而不是一个字符串,为了能够个体化“\ 0”字符?

回答

0

您是否需要在脚本组件中执行此操作?你不能使用派生列任务并使用Substring来提取每个列值吗?您也可以使用修剪来删除任何空格。

+0

使用脚本组件允许我以通用方式编写它,只是遍历所有列而不是为每个列编写代码。我已经解决了访问数据的问题,使用替代''值的视图。但如果可以使用脚本组件来完成,我还是会徘徊。 – sergiom 2010-12-03 14:27:28

0

考虑将char(4)转换为二进制表示(使用数据转换组件),然后从那里操作各个元素。如果可能,将其转换为源查询,以便它在进入管道之前已经是二进制文件。