Я пытался прочитать некоторые параметры из таблицы SQL Server с помощью задачи «Сценарий» в SSIS 2019. Моя задача - отправить электронное письмо.
Итак:
1) I создал задачу Script, основной класс ScriptMain.cs:
#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Net.Mail;
using System.Net;
#endregion
namespace ST_030020632f164aeba4f550d28a7a3dc6
{
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
public void Main()
{
string datetime = DateTime.Now.ToString("yyyyMMdd_HHmm");
string ErrorMsg = Dts.Variables["User::ErrorMsg"].Value.ToString();
try
{
// READ EMAIL PARAMETERS
EmailParameters EmailParams = new EmailParameters();
EmailParams.GetParameters(1);
string From = EmailParams.From.ToString();
string Body = EmailParams.Body.ToString() + Environment.NewLine + Environment.NewLine + ErrorMsg + Environment.NewLine + Environment.NewLine + "Best Regards." + Environment.NewLine + "TNS Reporting Team";
string Subject = EmailParams.Subject.ToString();
// CREATE EMAIL MESSAGE OBJECT
MailMessage msg = new MailMessage(From, "", Subject, Body);
// ADDING VALUES TO EMAIL MESSAGE
string[] xTo = EmailParams.To.ToString().Split(';');
foreach (string To in xTo)
{
msg.To.Add(To);
}
string[] xCC = EmailParams.CC.ToString().Split(';');
foreach (string CC in xCC)
{
msg.CC.Add(CC);
}
string[] xBCC = EmailParams.BCC.ToString().Split(';');
foreach (string BCC in xBCC)
{
msg.Bcc.Add(BCC);
}
SmtpClient SmtpC = new SmtpClient(EmailParams.SmtpC.ToString());
SmtpC.EnableSsl = true;
SmtpC.DeliveryMethod = SmtpDeliveryMethod.Network;
// SENDING EMAIL
SmtpC.Send(msg);
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception exception)
{
// Create Log File for Errors
using (StreamWriter sw = File.CreateText(Dts.Variables["User::LogFolder"].Value.ToString() + "\\" + "ErrorLog_" + datetime + ".log"))
{
sw.WriteLine(exception.ToString());
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
}
#region ScriptResults declaration
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
}
}
2) Другой класс с именем «EmailParameters», с методом внутри, чтобы заполнить его свойства результатом запроса:
#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Net.Mail;
using System.Net;
#endregion
namespace ST_030020632f164aeba4f550d28a7a3dc6
{
public class EmailParameters : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
public EmailParameters GetParameters(int ID)
{
// CREATE EMAILPARAMETERS OBJECT
EmailParameters EmailParams = new EmailParameters();
using (SqlConnection myADONETConnection = (SqlConnection)(Dts.Connections["HR_Db"].AcquireConnection(Dts.Transaction) as SqlConnection))
{
// GETTING INFORMATION FROM SQL TABLE
string Query = "select [From],[To],[CC],[BCC],[Subject],[Body],[SmtpC] from [cfg].[EmailSetting] where [ID] = @ID";
SqlCommand Command = new SqlCommand(Query, myADONETConnection);
Command.Parameters.AddWithValue("@ID", ID);
Command.CommandTimeout = 0;
// SETTING AND EXECUTING READER
using (SqlDataReader oReader = Command.ExecuteReader())
{
while (oReader.Read())
{
EmailParams.From = oReader["From"].ToString();
EmailParams.To = oReader["To"].ToString();
EmailParams.CC = oReader["CC"].ToString();
EmailParams.BCC = oReader["BCC"].ToString();
EmailParams.Subject = oReader["Subject"].ToString();
EmailParams.Body = oReader["Body"].ToString();
EmailParams.SmtpC = oReader["SmtpC"].ToString();
}
myADONETConnection.Close();
}
}
return EmailParams;
}
public string From { get; set; }
public string To { get; set; }
public string CC { get; set; }
public string BCC { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
public string SmtpC { get; set; }
}
}
3) Моя таблица SQL:
ID Scope From To CC BCC Subject Body SmtpC
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 SFTP Dowload me@business.com her@business.com;him@business.com HR - SFTP Error Status Hello, mail.business.com
Когда я ее выполняю, появляется исключение:
System.NullReferenceException: Object ссылка не установлена на экземпляр объекта. в ST_030020632f164aeba4f550d28a7a3dc6.EmailParameters.GetParameters (Int32 ID) в ST_030020632f164aeba4f550d28a7a3dc6.ScriptMain.Main ()