【问题标题】:Variable does not contain carriage return when created in SSIS script component在 SSIS 脚本组件中创建变量时不包含回车
【发布时间】:2017-03-15 15:51:53
【问题描述】:

我在 SSIS 的脚本组件中创建了一个 c# 变量。我的计划是将前一个变量值与通过数据流的每一行的数据加上一个新行连接起来。然后,我将该变量的值分配给一个 SSIS 变量,以便在发送邮件任务中使用。

public class ScriptMain : UserComponent
{
    string myString;

    public override void PostExecute()
    {
        base.PostExecute();
        this.Variables.emailContent = myString;
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        myString = myString + Row.column1 + ", " + Row.column2 + Environment.NewLine;
    }

}

我的问题是,当电子邮件发送 Environment.NewLine 似乎没有做任何事情时,SSIS 变量 emailContent 在电子邮件中的一行发送。

我也尝试过使用\n,但没有任何运气。

有趣的是,当我将变量直接写入文本文件时,新行按预期出现。

【问题讨论】:

  • 您确定问题在于数据在变量中的存储方式,而不是电子邮件消息的解释/显示方式吗? (即,如果电子邮件被 somewhere 解释为 HTML,则所有换行符都被视为空格。)
  • 好电话。结果是 Outlook 在收到电子邮件时没有纯文本。奇怪的是,如果我添加 Environment.NewLine 两次,它会起作用,尽管这是一个可怕的解决方案。我所做的是删除发送电子邮件任务并在 C# 中执行整个操作并将消息格式化为 HTML。谢谢!

标签: c# sql-server ssis etl ssis-2012


【解决方案1】:

尝试使用\r\n

public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        myString = myString + Row.column1 + ", " + Row.column2 + "\r\n";
    }

注意这些符号等价于:

\r : CR
\n : LF

还可以尝试复制反斜杠(因为您正在使用 SSIS 变量)

public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        myString = myString + Row.column1 + ", " + Row.column2 + "\\r\\n";
    }

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多