Отправка электронной почты с использованием SQL - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь узнать больше C#, и я столкнулся с чем-то, что я тоже не могу найти решение. Первоначально я написал эту функцию на VB. NET и использовал конвертер кодов для преобразования из VB в C#. Одна из ошибок, которые я получаю:

Имя Взаимодействие не существует в текущем контексте.

Есть ли ссылка, которую я пропускаю?

 public void EncompassEmail(string strLoanAssociates, string strSubject, string strBody)
        {
            var cmd;
            var sp;
            sp = "dbo.sp_send_dbmail";
            try
            {
                cmd = Interaction.CreateObject("ADODB.Command");
                {
                    var withBlock = cmd;
                    withBlock.ActiveConnection = "Provider=SQLOLEDB.1;Data Source=ACoolServer;Initial Catalog=MSDB;User ID=MailUser;Password=Goofy;";
                    withBlock.CommandType = 4;
                    withBlock.CommandText = sp;
                    withBlock.parameters("@recipients") = strLoanAssociates;
                    withBlock.parameters("@subject") = strSubject;
                    withBlock.parameters("@body") = strBody;
                    withBlock.parameters("@profile_name") = "EMail";
                    withBlock.parameters("@body_format") = "html";
                    withBlock.parameters("@importance") = "High";
                    withBlock.parameters("@sensitivity") = "Normal";
                    withBlock.Execute();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("An error has occured in the Email subroutine." + Constants.vbCrLf + strPlugin + Constants.vbCrLf + strVersion);
            }
            cmd = null;
        }

Я получаю ошибку в строке cmd = Interaction.CreateObject("ADODB.Command") Спасибо

1 Ответ

1 голос
/ 14 января 2020

Попробуйте код ниже. В дальнейшем вынимайте логин / пароль в соединении. Кроме того, я думаю, что вы пытаетесь использовать COM-объект. В. net вам не нужно использовать объект COM. Вы можете получить тот же результат, используя пространство имен using System.Data.SqlClient

        var sp = "dbo.sp_send_dbmail";
 using (SqlConnection con = new SqlConnection(@"Provider=SQLOLEDB.1;Data Source=ACoolServer;Initial Catalog=MSDB;User ID=MailUser;Password=Goofy;"))
            {
                using (SqlCommand cmd = new SqlCommand(sp, con))
                {
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.Parameters.Add("@recipients", strLoanAssociates);
                    cmd.Parameters.Add("@subject", strSubject);
                    cmd.Parameters.Add("@body", strBody);
                    cmd.Parameters.Add("@profile_name", "EMail");
                    cmd.Parameters.Add("@body_format", "html");
                    cmd.Parameters.Add("@profile_name", strLoanAssociates);
                    cmd.Parameters.Add("@importance", "High");
                    cmd.Parameters.Add("@sensitivity", "Normal");
                    con.Open();
                    int rowsAffected = cmd.ExecuteNonQuery();
                }
            }
...