2010-11-18 8 views
2

現在、フィールドに '\ 0'文字を含むデータベースを作成しています。例えばCHAR(n)フィールドの ' 0'文字を削除するためのSSISスクリプトコンポーネント

フィールド

Category CHAR(4) 

時々持っている値 '\ 0 \ 0 \ 0 \ 0'、時には(4 0文字)と ''(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

スクリプトコンポーネントでこれを行う必要がありますか?派生列タスクを使用して、サブストリングを使用して各列値を引き出すことはできませんか?トリムを使用してスペースを削除することもできます。

+0

スクリプトコンポーネントを使用すると、1つの列ごとにコードを記述するのではなく、すべての列を反復するという汎用的な方法で記述することができます。私は値を置き換えるビューを使ってデータにアクセスする問題を解決しました。しかし、スクリプトコンポーネントを使用してそれを行うことが可能であれば、私はまださまよっています。 – sergiom

0

(データ変換コンポーネントを使用して)char(4)をバイナリ表現に変換し、そこから個々の要素を操作することを検討してください。可能であれば、パイプラインに入る前にバイナリになるようにソースクエリにキャストします。

関連する問題