c# - 如何将动态变化的字符串传递给脚本任务?

标签 c# visual-studio ssis

我有一个 SSIS 解决方案和包。该包包含一个脚本任务,该任务通过 API 调用向 Telegram 发送消息。到目前为止,这一切正常,因为包接收两个变量:API token 和 ChatId。在包内我临时定义了一条要发送的消息。

我在这里担心的是,我想根据包执行期间发生的条件使用相同的脚本发送不同的消息,并且我不希望相同的脚本任务中包含不同的消息。我一直在尝试考虑包变量,但并不真正了解如何使用它们来发送变量消息,因为每个脚本任务都需要不同的变量

这是到目前为止我的控制流程。正如您所看到的,脚本任务根据任务上下文运行多次,需要发送不同的消息。 enter image description here

这是我的脚本任务的主要部分。正如你所看到的,我暂时设置了一条固定消息,这就是我想要动态的消息(将其视为函数参数)

public void Main()
{

    ///TELEGRAM API
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    string urlString = "https://api.telegram.org/bot{0}/sendMessage?chat_id={1}&text={2}&parse_mode=html";
    string apiToken = (String)Dts.Variables["User::TelegramToken"].Value;
    string chatId = (String)Dts.Variables["User::TelegramChatId"].Value;
    string text = "This is the message to be sent";
    urlString = String.Format(urlString, apiToken, chatId, text); 
    WebRequest request = WebRequest.Create(urlString); 
    Stream rs = request.GetResponse().GetResponseStream(); 
    StreamReader reader = new StreamReader(rs); 
    string line = ""; 
    StringBuilder sb = new StringBuilder();
    while (line != null)
    {
        line = reader.ReadLine();
        if (line != null)
            sb.Append(line);
    }
    string response = sb.ToString();
   ///TELEGRAM API

    Dts.TaskResult = (int)ScriptResults.Success;
}

EDIT1:我只是想在执行脚本之前使用表达式任务来设置变量。这是一个合适的选择吗?

最佳答案

是的,使用表达式任务来设置消息。以下是我建议的更改:

  1. 将电报消息之前的所有内容放入序列容器中,并将该序列容器连接到电报脚本任务
  2. 在包级别添加一个字符串变量来保存消息
  3. 使用上面序列容器中的表达式设置消息变量
  4. 用变量引用替换硬编码文本

enter image description here

enter image description here

...
    string text = (String)Dts.Variables["User::Message"].Value;
...

关于c# - 如何将动态变化的字符串传递给脚本任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73024913/

相关文章:

c# - 与本地模拟器发生连接错误

visual-studio - 将搜索限制为 Visual Studio 中的指定文件夹或文件类型?

c# - 是否可以在我的项目中包含一个二进制文件并使用它?

sql-server - SSIS 传输数据库任务神秘错误消息 0x80131500

c# - 将值存储在单独的、特定于 C# 类型的列中,还是全部存储在一列中?

c# - Idisposable 是否会在 struct 等堆栈项上调用(不使用 "Using"时)

c# - 使用不同的服务器验证 token ?

sql-server - SQL Server Data Tools 在轻度 DAX 计算中崩溃

sql-server - 在 ssis 包中使用的存储过程中使用 "Set NOCOUNT ON"有什么好处?

sql-server - 从文件夹中删除超过 90 天的文件的最简单方法是什么?