C# SSIS-脚本任务类从数据库读取查询

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

我试图使用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.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(),问题也是一样的。你在错误中得到问题的行号了吗?不,错误只是,好像没有实例化我的方法。你能添加解决方案作为答案吗。所以,这对将来的其他人是有帮助的。