SSIS 脚本任务

通常,Integration Services 提供了执行日常或例行 ETL 操作所需的所有任务。然而,在某些情况下,内置任务可能无法提供帮助。SSIS 脚本任务允许实现工具箱中(包括内置任务和转换)不可用或不可能的功能。

脚本任务使用 Microsoft VSTA(Visual Studio Tools for Applications)作为代码环境,您可以在其中编写 C# 或 VB 代码。

在 Integration Services 中,SSIS 脚本任务是扩展的功能。它允许开发人员将自定义代码集成到他们的 ETL 过程或包中。您可以使用 C# 或 Visual Basic.NET 等常用语言在包内编写脚本。 

SSIS 脚本任务的优点

使用脚本任务的一些优点如下:

  1. 通过用 C# 或 VB.NET 编写自定义代码,您可以创建适合您组织的独特解决方案。
  2. 使用脚本任务来实现业务逻辑,它还可以处理复杂的转换。
  3. 它允许您使用外部程序集和库执行高级计算或操作。但是,您必须在脚本任务项目中添加对这些依赖项的引用。
  4. 任务编辑器窗口允许将包中的读写变量传递给脚本。因此,更改包变量的值可以改变脚本。 
  5. 我们可以在包的控制流和数据流中使用 SSIS 脚本任务(脚本组件作为源、目标和转换)。
  6. 您可以将脚本任务的结果存储在变量中,以便传递给下一个任务。
  7. 如果您想逐行操作,请使用脚本组件;否则,请使用脚本任务。

提示:脚本任务 VSTA 提供了通用 Visual Studio 环境中的所有标准功能。

SSIS 脚本任务发送邮件

将脚本任务从工具箱拖放到“控制流”区域。在开始配置脚本任务之前,让我们创建四个变量。要创建变量,请右键单击“控制流”区域,它将打开上下文菜单以选择“变量”选项。选择“变量”选项后,将打开一个名为“变量”的新窗口来创建新变量。

在这里,您可以为 SSIS 脚本任务创建 n 个变量。

  • EmailFrom:请指定您要发送邮件的电子邮件 ID。
  • EmailTo:请指定您要发送邮件的电子邮件 ID。
  • EmailSubject:请指定您想要包含的主题。
  • EmailBody:请指定消息。它可以是纯文本或 HTML 消息。
Script Task in SSIS 2

双击脚本任务将打开以下编辑器来配置组件。

  • EntryPoint:请指定 SSIS 运行时调用作为入口点的**方法名称**。此处指定的**方法名称**必须在 ScriptMain 类中。请记住,您可以根据需要更改名称,更改时,您必须在 ScriptMain 类中进行更改。
Open Editor 3

SSIS 脚本任务“常规”选项卡

请点击脚本任务“常规”选项卡来更改默认的名称和描述。

  • Name:请提供唯一名称。
  • Description:简要描述脚本任务的功能。提供有效的描述始终是一个好习惯。
Add name and Description under General tab 4

ScriptLanguage:Microsoft 使用两种流行语言:Visual Basic (VB) 和 C#。我熟悉 C#,因此我们选择 C# 作为语言。

Choose C# or Visual Basic Language 5
  • ReadOnlyVariables:请选择您想在 SSIS 脚本任务中使用的变量,这些变量可以是用户定义的或系统默认变量。请记住,选择为 ReadOnlyVariables 的变量仅用于读取目的(我们无法更改它们)。
  • ReadWriteVariables:请选择您想在此任务中使用的变量,这些变量可以是用户定义的或系统默认变量。请记住,选择为 ReadWriteVariables 的变量可以根据我们的要求进行更改。

请通过点击“只读变量”选项的“Eclipse(...)”按钮来选择变量。

Script Task in SSIS 6

点击“Eclipse(...)”按钮后,“选择变量”窗口将打开。请选择先前创建的变量。

Choose the Variables 7

在 SSIS 脚本任务中添加 C# 代码。

选择完所需的变量后,请点击“编辑脚本...”按钮来编写实际的 C# 脚本。

Script Task in SSIS 8

点击“编辑任务”后,将打开 ScriptMain.cs 类文件来编写 C# 脚本。要从 C# 发送电子邮件,我们需要在顶部添加两个引用或导入引用:using System.Net; 和 using System.Net.Mail;。

using System.Net;
using System.Net.Mail;

提示:如果您是 VB 开发人员,那么它应该是 ScriptMain.vb。

接下来,在 Main() 函数中添加您的代码。请记住,如果您的代码很长或很复杂,请尝试通过创建方法来分割代码。

C# Code to Send an Email

我们在上面的屏幕截图中使用的此脚本任务的 C# 代码是:

// C# code
String SendMailFrom = Dts.Variables["EmailFrom"].Value.ToString();
String SendMailTo = Dts.Variables["EmailTo"].Value.ToString();
String SendMailSubject = Dts.Variables["EmailSubject"].Value.ToString();
String SendMailBody = Dts.Variables["EmailBody"].Value.ToString();

try
  {
     MailMessage email = new MailMessage();
     SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
     // START
     email.From = new MailAddress(SendMailFrom);
     email.To.Add(SendMailTo);
     email.Subject = SendMailSubject;
     email.Body = SendMailBody;
     //END

     SmtpServer.Port = 587;
     SmtpServer.Credentials = new System.Net.NetworkCredential(SendMailFrom, "your password");
     SmtpServer.EnableSsl = true;

     SmtpServer.Send(email);
     MessageBox.Show("Email was Successfully Sent ");
  }
catch (Exception ex)
  {
      MessageBox.Show(ex.ToString());
  }
Dts.TaskResult = (int)ScriptResults.Success;

如果您忘记创建变量(或发现创建变量有困难),您可以删除前四行代码,并将 //Start… END 之间的代码替换为下方显示的代码。

// Example
email.From = new MailAddress("xxxxxxxxxxxx@gmail.com");
email.To.Add("xxxxxxxxxxxxxy@gmail.com");
email.Subject = "Test Mail";
email.Body = "This Email is coming from SSIS Script Task";

完成编辑后,请关闭 ScriptMain.cs 文件和脚本任务编辑器。让我们运行包。

SSIS Script Task 11

从上图可以看出,SSIS 脚本任务已成功执行,并且我们收到了一个消息框,表明电子邮件已成功发送。让我打开我的 Gmail。

Gmail 12

从上图可以看出,我们收到了带有指定消息的电子邮件。

需要记住的几点

  • 如果您想在每次数据加载后向您的经理(或自己)发送电子邮件,您可以使用此脚本和数据流任务。
  • 始终使用变量来存储电子邮件、密码、主题或 SMTP 凭据。
  • 如果出现关于安全连接的错误,请转到 Gmail 帐户设置中的“允许不安全的应用程序访问”,然后打开“允许不安全的应用程序访问”选项。

评论已关闭。