Lay_Kay Ответов: 1

Не удается прочитать текущие записи, когда я отправляю электронное письмо


Я пытаюсь отправить электронное письмо с получением текущей строки, когда пользователь нажимает кнопку "Да". Однако электронная почта не будет заполнять текущую запись - вместо этого она будет заполнять предыдущую запись. Пожалуйста помочь.'


SqlConnection con3 = new SqlConnection(ConfigurationManager.ConnectionStrings
["Personnel_Info_ConnectionString"].ConnectionString);


protected void btnInsert_Data_Click(object sender, EventArgs e)
{        
    SqlCommand cmd1 = new SqlCommand
    (
            "INSERT INTO Users.[Employee] VALUES " + 
            " (@txtFirstName, @txtLastName, @txtTitle, @txtEmail, @txtPhone, @txtEffective_Date, " +
            " @Email_Access_Boolean, @Remote_Access_Boolean, @Employee_Access_Boolean, " +
            " @Parking_Access_Boolean, @Security_Risk_Boolean, @Authorize_Purchase_Boolean, " + 
            " @Point_Contact_ID, @txtManager, @Dept_ID)", 
             con
        );

        System.Threading.Thread.Sleep(3000);

        cmd1.Parameters.AddWithValue("@txtFirstName", txtFirstName.Text);
        cmd1.Parameters.AddWithValue("@txtLastName", txtLastName.Text);
        cmd1.Parameters.AddWithValue("@txtTitle", txtTitle.Text);
        cmd1.Parameters.AddWithValue("@txtEmail", this.txtEmail.Text.Trim());
        cmd1.Parameters.AddWithValue("@txtPhone", txtPhone.Text);
        cmd1.Parameters.AddWithValue("@txtEffective_Date", txtEffective_Date.Text);
 


        /*** Email Access logic ***/
        string Email_Access = string.Empty;
        // cmd1.Parameters.AddWithValue("@Email_Access_Boolean", Email_Access);
        
        if (Email_Access_YES.Checked)
        {
            Email_Access = "Yes";
            // cmd1.Parameters.AddWithValue("@Email_Access_Boolean", Email_Access);

           
            /*** Send email to IS ***/
            MailMessage mail_IS = new MailMessage("TestingApp5677@gmail.com", "jyuen@stbh.org");
            mail_IS.IsBodyHtml = true;
            SmtpClient client_IS = new SmtpClient("smtp.gmail.com", 587);

            mail_IS.Body = "<table>";
            StringBuilder Email_Access_builder = new StringBuilder();

            Email_Access_builder.Append("Please process the following employee: ");
            Email_Access_builder.Append("<br/> <br/>");
            Email_Access_builder.Append
            (
                "<table border='4px' cellpadding='3' cellspacing='4' bgcolor='lightyellow' style='font-family:Garamond; font-size:medium'>"
            );
            Email_Access_builder.Append("<tr>");


            /*** Database content sent to email  ***/
            String Email_Access_SQL =
                "SELECT FirstName AS [First Name], LastName AS [Last Name], Dept AS [Department], Manager FROM Users.Employee (nolock) "
                + "WHERE ID = (SELECT MAX(ID) FROM Users.Employee WHERE Email_Access = 'Yes')";

            SqlDataAdapter Email_Access_adapter = new SqlDataAdapter(Email_Access_SQL, con3);
            DataSet Email_Access_data = new DataSet();
            Email_Access_adapter.Fill(Email_Access_data);
            

            foreach (DataColumn Column_Header in Email_Access_data.Tables[0].Columns)
            {
                Email_Access_builder.Append("<td >");
                Email_Access_builder.Append(Column_Header.ColumnName);
                Email_Access_builder.Append("</td>");
            }
            Email_Access_builder.Append("</tr>");


            foreach (DataRow Row_Info in Email_Access_data.Tables[0].Rows)
            {
                Email_Access_builder.Append("<tr>");

                foreach (DataColumn Column_Info in Email_Access_data.Tables[0].Columns)
                {
                    Email_Access_builder.Append("<td >");
                    Email_Access_builder.Append(Row_Info[Column_Info.ColumnName].ToString());
                    Email_Access_builder.Append("</td>");
                }
            }
            Email_Access_builder.Append("</tr>");
            Email_Access_builder.Append("</table>");
            Email_Access_builder.Append("<br/>"); 
            Email_Access_builder.Append("Thanks for your help!");
            
            mail_IS.Body = Email_Access_builder.ToString();

            client_IS.DeliveryMethod = SmtpDeliveryMethod.Network;
            client_IS.UseDefaultCredentials = false;
            client_IS.Host = "smtp.gmail.com";
            mail_IS.CC.Add(new MailAddress("ahosu@stbh.org"));
            mail_IS.Subject = "Personnel Confirmation for Email Access";
            

            client_IS.EnableSsl = true;
            client_IS.Credentials = new System.Net.NetworkCredential()
            {
                UserName = "*****@gmail.com",
                Password = "****"
            };

            client_IS.Send(mail_IS);
            // cmd1.Parameters.AddWithValue("@Email_Access_Boolean", Email_Access);
        }
        else
        {
            Email_Access = "No";
        }
        cmd1.Parameters.AddWithValue("@Email_Access_Boolean", Email_Access);


Что я уже пробовал:

Пожалуйста, сообщите, почему отправленное электронное письмо заполняет предыдущую запись из значения параметра "выбрано".

1 Ответов

Рейтинг:
2

Gerry Schmitz

Вы извлекаете "последнюю" добавленную запись (MAX(ID)) "до того, как" сделаете "вставку" своей новой записи.

(На самом деле я не вижу никакой "вставки", но предполагаю, что она находится где-то внизу, основываясь на ваших назначениях параметров).


Lay_Kay

Не МАКС(ИД), получение последней записи?


SqlCommand cmd1 = new SqlCommand
(
     "INSERT INTO Users.[Employee] VALUES " + 
     " (@txtFirstName, @txtLastName, @txtTitle, @txtEmail, @txtPhone, 
 @txtEffective_Date, " +
            " @Email_Access_Boolean, @Remote_Access_Boolean, @Employee_Access_Boolean, " +
            " @Parking_Access_Boolean, @Security_Risk_Boolean, @Authorize_Purchase_Boolean, " + 
            " @Point_Contact_ID, @txtManager, @Dept_ID)", 
             con
);


Я думал, что это уже вставка записей. Пожалуйста, посоветуйте. Спасибо!

Gerry Schmitz

Это показывает "команду"; он не "выполняет" ее.

Lay_Kay

Где (в скрипте) я могу выполнить команду INSERT? Пожалуйста, посоветуйте.

Lay_Kay

У меня также есть следующая кодировка:


 con.Open();
 cmd1.ExecuteNonQuery();

 Personel_Grid.DataBind();
 con.Close();

 lbl_Email.Visible = true;
 lbl_Email.Text = "The Personnel Process started.";


 txtFirstName.Text = "";
 txtLastName.Text = "";
 txtTitle.Text = "";
 txtManager.Text = "";
 txtEmail.Text = "";
 txtPhone.Text = "";
 txtEffective_Date.Text = "";
 lbl_Success.Text = "";
}

Gerry Schmitz

Теперь вы показываете "выполнить" ... но неясно, "когда" вы это делаете.

(Не в нужном месте, основываясь на вашем первоначальном посте).

А что произойдет, если кто-то другой "добавит новую запись" до того, как вы сделаете свой "Макс(ID)"? Как ты думаешь, чье досье ты получишь?

Lay_Kay

Я ожидаю, что последний пользователь выберет "да", чтобы получить запись.

Lay_Kay

Я вижу, что новые данные вставляются в базу данных, но не отображаются в отправленном электронном письме.

Lay_Kay

Джерри, пожалуйста, посоветуй. Я застрял.

Gerry Schmitz

Вы показываете "фрагменты" кода.

После того как вы "вставите", извлеките запись и "отобразите" ее, чтобы подтвердить свою логику "базы данных". Только тогда начинайте возиться с электронной почтой, потому что вы кажетесь "смущенным".

Lay_Kay

Не могли бы вы предоставить мне прямой образец кодирования? Спасибо!