0

我想将无法加载到表中的行重定向到错误文件。

在此处输入图像描述

我看到红色异常路径有 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 转换函数不正确吗?

4

1 回答 1

0

知道了。

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    string buffer = GetString(Row.FlatFileSourceErrorOutputColumn.GetBlobData(0, (int)(Row.FlatFileSourceErrorOutputColumn.Length - 2)));
    System.Windows.Forms.MessageBox.Show(buffer);
    byte[] ThisBytes = GetBytes(buffer);
    Row.FlatFileSourceErrorOutputColumn.ResetBlobData();
    Row.FlatFileSourceErrorOutputColumn.AddBlobData(ThisBytes);
    }

static string GetString(byte[] bytes)
{
    System.Text.Encoding enc = System.Text.Encoding.ASCII;
    return enc.GetString(bytes);

}
static byte[] GetBytes(string str)
{
    System.Text.Encoding enc = System.Text.Encoding.ASCII;
    return enc.GetBytes(str);
}

我仍然想知道为什么 SSIS 会添加 CRLF!

于 2012-05-31T20:40:34.717 回答