C# SSIS-脚本任务类从数据库读取查询
我试图使用SSIS 2019中的脚本任务从SQL Server表中读取一些参数。我的工作范围是发送电子邮件 因此: 1) 我创建了一个脚本任务,主类ScriptMain.cs是:C# SSIS-脚本任务类从数据库读取查询,c#,sql-server,ssis,C#,Sql Server,Ssis,我试图使用SSIS 2019中的脚本任务从SQL Server表中读取一些参数。我的工作范围是发送电子邮件 因此: 1) 我创建了一个脚本任务,主类ScriptMain.cs是: #region Namespaces using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.Data.SqlClient; using System
#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:对象引用未设置为对象的实例。
at ST_030020632f164aeba4f550d28a7a3dc6.EmailParameters.GetParameters(Int32 ID)
位于ST_030020632f164aeba4f550d28a7a3dc6.ScriptMain.Main()
我想你还没有打开连接。SqlConnection myADONETConnection。你必须打开它。myADONETConnection.open()不,即使我添加了open(),问题也是一样的。你在错误中得到问题的行号了吗?不,错误只是,好像没有实例化我的方法。你能添加解决方案作为答案吗。所以,这对将来的其他人是有帮助的。