2011-01-27 13 views
4

C#コンポーネントで苦労しています。私がしようとしているのは、パイプで区切られた入力ソースのntextである列を取り出し、その配列をテキストファイルに書き込むことです。私のコンポーネントを実行すると、出力は次のようになります。SSISスクリプトコンポーネント:Microsoft.SqlServer.Dts.Pipeline.BlobColumn

DealerID,StockNumber,Option 
161552,P1427,Microsoft.SqlServer.Dts.Pipeline.BlobColumn 

私はGetBlobDataメソッドを使って作業していて、苦労しています。どんな援助も大いにありがとうございます!ここでは完全なスクリプトは次のとおりです。

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    string vehicleoptionsdelimited = Row.Options.ToString(); 
    //string OptionBlob = Row.Options.GetBlobData(int ; 
    //string vehicleoptionsdelimited = System.Text.Encoding.GetEncoding(Row.Options.ColumnInfo.CodePage).GetChars(OptionBlob); 
    string[] option = vehicleoptionsdelimited.Split('|'); 
    string path = @"C:\Users\User\Desktop\Local_DS_CSVs\"; 

    string[] headerline = 
    { 
     "DealerID" + "," + "StockNumber" + "," + "Option" 
    }; 

    System.IO.File.WriteAllLines(path + "OptionInput.txt", headerline); 

    using (System.IO.StreamWriter file = new System.IO.StreamWriter(path + "OptionInput.txt", true)) 
    { 
     foreach (string s in option) 
     { 
      file.WriteLine(Row.DealerID.ToString() + "," + Row.StockNumber.ToString() + "," + s); 
     } 
    } 
+0

また、同じクラスをSSIS varsの代わりにC#で定数を使用してコンソールアプリケーションに作成したところ、これは素晴らしい結果でした。そのブロブをちょうど窒息させる。あなたが私のコメントコードで見ることができるように、私は実験していましたが、私はblobから文字列への変換を正しく実行することができませんでした。 – Zach

+0

デバッガを使用して、 'Row.Options.ToString()'の値を教えてください。 – Homam

答えて

10

は、この機能を使用して

BlobToString(Row.Options) 

を使用してみてください:

から適応
private string BlobToString(BlobColumn blob) 
    { 
     string result = ""; 
     try 
     { 
      if (blob != null) 
      { 
       result = System.Text.Encoding.Unicode.GetString(blob.GetBlobData(0, Convert.ToInt32(blob.Length))); 
      } 
     } 
     catch (Exception ex) 
     { 
      result = ex.Message; 
     } 
     return result; 
    } 

http://mscrmtech.com/201001257/converting-microsoftsqlserverdtspipelineblobcolumn-to-string-in-ssis-using-c

1

この問題に対する別の非常に簡単な解決策、これは合計PITAであるため、エラー出力をdeあなたのBLOBデータを新しい列としてSTRまたはWSTRにキャストします。

その出力をスクリプトコンポーネントにルーティングすると、データはパイプライン上で追加の列として解析されます。

これは、データが8000文字未満の場合にのみ有効です。

関連する問題