我想将无法加载到表中的行重定向到错误文件。
我看到红色异常路径有 3 个输入列进来,“平面文件源错误输出列”包含文件中的原始数据。
问题是当我打开文件时,每行后面都有一个额外的回车换行字符。我希望能够手动修复错误并重新处理它们,而不必删除所有添加的 CRLF 字符。所以我添加了一个脚本组件来删除正在添加的字符。
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string buffer = GetString(Row.FlatFileSourceErrorOutputColumn.GetBlobData(0, (int)(Row.FlatFileSourceErrorOutputColumn.Length)));
System.Windows.Forms.MessageBox.Show(buffer);
byte[] ThisBytes = GetBytes("Test");
Row.FlatFileSourceErrorOutputColumn.ResetBlobData();
Row.FlatFileSourceErrorOutputColumn.AddBlobData(ThisBytes);
}
static string GetString(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
但是我的调试消息框显示了不可显示的字符,这些字符显示为块。
当我尝试将文字“TEST”强制输出文件作为测试以查看我是否可以控制文件中的内容时,每个字母后都会出现 NULL(ASCII 0)字符。
当我只是使用脚本块组件将输出列重定向到文件时,为什么 SSIS 添加 CRLF 以尝试修改写入的数据?我怎样才能摆脱 CRLF?为什么我无法读取数据列中的字节数组并将其显示为字符串?为什么“TEST”文字在每个字母之间都有 NULLS?我的 ByteArray 转换函数不正确吗?