SSIS脚本组件:Microsoft.SqlServer.Dts.Pipeline.BlobColumn

在C#组件中苦苦挣扎。 我想要做的是在我的输入源中使用ntext的列,该列用管道分隔,然后将数组写入文本文件。 当我运行我的组件时,我的输出如下所示:

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); } } 

尝试使用

 BlobToString(Row.Options) 

使用此function:

  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

此问题的另一个非常简单的解决方案,因为它是一个完整的PITA,是将错误输出路由到派生列组件,并将blob数据作为新列转换为STR或WSTR。

将其输出路由到脚本组件,数据将作为管道上的附加列进入,以供您解析。

这可能仅在您的数据长度少于8000个字符时才有效。