Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SSIS:将错误行重定向到文件。文件包含额外的意外回车_Sql Server 2008_Ssis - Fatal编程技术网

Sql server 2008 SSIS:将错误行重定向到文件。文件包含额外的意外回车

Sql server 2008 SSIS:将错误行重定向到文件。文件包含额外的意外回车,sql-server-2008,ssis,Sql Server 2008,Ssis,我想将无法加载到表中的行重定向到错误文件 我看到红色异常路径有3个输入列进入,“平面文件源错误输出列”包含文件中的原始数据 问题是当我打开文件时,每行后面都有一个额外的回车符。我希望能够手动修复错误并重新处理它们,而不必删除所有添加的CRLF字符。因此,我添加了一个脚本组件,以删除添加的字符 public override void Input0_ProcessInputRow(Input0Buffer Row) { string buffer = GetString(Row.Fl

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

我看到红色异常路径有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;
}
但我的调试消息框显示了以块形式显示的不可显示字符

当我试图对输出文件强制执行文字“测试”以测试是否可以控制文件中的内容时,每个字母后面都会出现NULL(ASCII 0)字符

当我只是简单地使用脚本块组件将输出列重定向到文件w/o以尝试修改写入的数据时,为什么SSIS要添加CRLF?我怎样才能摆脱CRLF?为什么我无法读取数据列中的字节数组并将其显示为字符串?为什么“TEST”文本的每个字母之间都有空值?我的字节数组转换函数不正确吗?

明白了

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

如果我错了,请纠正我,但您显示的是无法从源文件(详细信息文件)读取的行的重定向。仅仅因为它们已被读取并不意味着它们不会在插入表时爆炸。是的,我正在根据与目标表匹配的预期列定义集重定向无法读取的行。例如,文件中的列A映射到dest表的列A。两处的A列定义为varch(1)。如果我得到的varchar vaclue大于len 1,我希望它指向异常文件。