SSIS脚本组件或任务检查文件行终止符,如果不是CRLF则失败

时间:2015-12-02 20:52:58

标签: ssis etl

我对使用脚本进行ETL工作有点新,除了使用脚本用值替换LF或CRLF之外,我找不到与此相关的任何内容。是否可以使用脚本或其他内容来验证我的文件仅使用CRLF行终止符,如果它只是CRLF,则它无法完成作业。

我希望失败这个工作,然后我可以向代理商报告他们需要遵循特定格式的文件,因此加载的唯一文件是CRLF文件。

谢谢,

1 个答案:

答案 0 :(得分:0)

找到了处理我问的方法。我最终在我的数据流之前创建了一个脚本任务,以检查文件是否包含" \ r \ n"。有了这个,我使用了两个包变量并通过我的脚本传递它们。这些变量是" FileName" (可能是文件路径,但我使用的名称与包中使用的名称相同)," ErrorMessage"和#34; IsCrLf"。 " IsCrLf"变量是一个布尔变量,它基本上只是检查" \ r \ n"存在于文件中。如果没有,ErrorMessage将被填充并传递给电子邮件警报。

这是我的任务代码:

public void Main()
    {
        using (StreamReader r = new StreamReader(Dts.Variables["User::FileName"].Value.ToString()))
        {
            string s1 = r.ReadToEnd();
            string s2 = "\r\n";
            bool b = s1.Contains(s2);

            if (b)
            {
                Dts.Variables["User::IsCrLf"].Value = true;
            }

            else
            {
                Dts.Variables["User::ErrorMessage"].Value = Dts.Variables["User::FileName"].Value.ToString()+Environment.NewLine+"File does not contain the expected CRLF format.";
                Dts.Events.FireError(0, "Error", "File does not contain the expected CRLF format.", string.Empty, 0);
                Dts.TaskResult = (int)ScriptResults.Failure;
            }
        }
    }
相关问题