даже когда вставка просмотра сведений не удалась, приложение отправляет электронное письмо

У меня есть подробное представление, которое прикреплено к источнику данных sql. Когда новый заказ вставлен, я отправляю электронное письмо. Сейчас есть проблема с моей программой, и пользователь не может вставить данные из моего приложения, но электронное письмо по-прежнему отправляется, если данные вставлены.

Это мой вставленный метод просмотра сведений:

        protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
        {
 if (successfull == true && Page.IsValid && e.AffectedRows ==1)
        {

            //TextBox TextBoxWorkOrderNumber = (TextBox)(DetailsView1.FindControl("TextBox11"));
            TextBox TextBoxRequestor = (TextBox)(DetailsView1.FindControl("TextBox3"));
            TextBox TextBoxDate = (TextBox)(DetailsView1.FindControl("TextBox1"));
            //TextBoxDate.Text = DateTime.Now.ToShortDateString();
            TextBox TextBoxDepartment = (TextBox)(DetailsView1.FindControl("TextBox4"));
            TextBox TextBoxCompletionDate = (TextBox)(DetailsView1.FindControl("TextBox16"));
            TextBox TextBoxMachineDescription = (TextBox)(DetailsView1.FindControl("TextBox5"));
            TextBox TextBoxMachineLocation = (TextBox)(DetailsView1.FindControl("TextBox6"));
            TextBox TextBoxWorkRequired = (TextBox)(DetailsView1.FindControl("TextBox7"));
            // DropDownList status = (DropDownList)(DetailsView1.FindControl("DropDownList2"));
            TextBox TextBoxStatus = (TextBox)(DetailsView1.FindControl("TextBox12"));
            TextBoxStatus.Text = "Open";






            DropDownList list = (DropDownList)(DetailsView1.FindControl("DropDownList1"));
            TextBox9.Text = list.SelectedValue;
            DropDownList lists = (DropDownList)(DetailsView1.FindControl("DropDownList2"));
            TextBox14.Text = lists.SelectedValue;


            if (TextBoxRequestor.Text.Length <= 0)
            {
                TextBoxRequestor.Text = "Not Applicable";
            }
            if (TextBox14.Text.Length <= 0)
            {
                TextBoxDepartment.Text = "Not Provided";
            }
            if (TextBoxCompletionDate.Text.Length <= 0)
            {
                TextBoxCompletionDate.Text = "Not Provided";
            }
            if (TextBoxMachineDescription.Text.Length <= 0)
            {
                TextBoxMachineDescription.Text = "Not Provided";
            }

            if (TextBoxMachineLocation.Text.Length <= 0)
            {
                TextBoxMachineLocation.Text = "Not Provided";
            }

            if (TextBoxWorkRequired.Text.Length <= 0)
            {
                TextBoxWorkRequired.Text = "Not Provided";
            }

                if (TextBox9.Text == "Safety" && e.AffectedRows==1)
                {
                  {
                      bool isLocal = HttpContext.Current.Request.IsLocal;
                      if (isLocal == true)
                      {
                          string id = TextBox13.Text.ToString();
                          System.Net.Mail.MailMessage mm = new System.Net.Mail.MailMessage();
                          mm.From = new System.Net.Mail.MailAddress("[email protected]");//who send
                          mm.To.Add(new System.Net.Mail.MailAddress("[email protected]"));
                          //[email protected]
                          mm.Subject = "WorkOrders Type Safety";
                          mm.Body = "DO NOT REPLY TO THIS EMAIL" + "<br><br/>" + "WorkOrderNumber" 
        + ": &nbsp;" + "<a href=\"http://localhost:49695/SafetyReport.aspx?WorkOrderNum=" + TextBox13.Text + "\">"
         + TextBox13.Text + "</a>" + "<-Click on the Work Order Number For Report"
         + "<br><br/>" + "WorkOrderNumber" + ": &nbsp;" + 
        "<a href=\"http://localhost:49695/Safety.aspx?WorkOrderNum=" + 
        TextBox13.Text + "\">" + TextBox13.Text + "</a>" +
         "<-Click on this Work Order Number To Enter Data" + 
        "<br><br/>" + "Requestor" + ":&nbsp;" + TextBoxRequestor.Text +
         "<br><br/>" + "Date" + ":&nbsp;" + TextBoxDate.Text + 
        "<br><br/>" + "Department" + ":&nbsp;" + TextBox14.Text +
         "<br><br/>" + "Machine Description" + ":&nbsp;" + 
        TextBoxMachineDescription.Text + "<br><br/>" + 
        "Machine Location" + ":&nbsp;" + 
        TextBoxMachineLocation.Text + "<br><br/>" +
         "Work Required" + ":&nbsp;" + TextBoxWorkRequired.Text + "<br><br/>" 
                            mm.IsBodyHtml = true;
                            System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
                            client.Host = ConfigurationManager.AppSettings["smtpServer"];
                            client.Send(mm);
                            captureuseremail();
                       }
              }
    }
  }    

я вижу вставку DetailsView1_Item, как я могу проверить, вставляется ли это в базу данных sql?? если вставка прошла успешно, я бы хотел установить логическое значение в true, а если true, то выполнить вставку Details_View1 и отправить электронное письмо, иначе отменить вставку.

я также использую кнопку вставки, которая поставляется с представлением сведений. пожалуйста, попросите меня предоставить дополнительный код, если вы запутались, и я с радостью предоставлю его.

пожалуйста помоги :(

Добавлен Дополнительный код:

  INSERT INTO Master(Requestor, Date, Department, CompletionDate, MachineDescription, 
MachineLocation, [Type of Work Order], [Work Required], Status) 
VALUES (@Requestor, @Date, @Department, @CompletionDate, 
@MachineDescription, @MachineLocation, @Type_of_Work_Order, 
@Work_Required, @Status); SET @NewId = Scope_Identity()

у меня просто есть логическое значение; для которого я установил значение true в конце метода Item_Inserting().

когда пользователь нажимает кнопку "Отправить" в представлении сведений, которое представляет собой не что иное, как командную кнопку "Вставить", тогда код достигает элемента item_inserting, который принимает все значение Item_Inserting представления сведений:

protected void DetailsView1_ItemInserting (отправитель объекта, DetailsViewInsertEventArgs e) {

        if (Page.IsValid)
        {

            //TextBox TextBoxWorkOrderNumber = (TextBox)(DetailsView1.FindControl("TextBox11"));
            TextBox TextBoxRequestor = (TextBox)(DetailsView1.FindControl("TextBox3"));
            TextBox TextBoxDate = (TextBox)(DetailsView1.FindControl("TextBox1"));
            //TextBoxDate.Text = DateTime.Now.ToShortDateString();
            TextBox TextBoxDepartment = (TextBox)(DetailsView1.FindControl("TextBox4"));
            TextBox TextBoxCompletionDate = (TextBox)(DetailsView1.FindControl("TextBox16"));
            TextBox TextBoxMachineDescription = (TextBox)(DetailsView1.FindControl("TextBox5"));
            TextBox TextBoxMachineLocation = (TextBox)(DetailsView1.FindControl("TextBox6"));
            TextBox TextBoxWorkRequired = (TextBox)(DetailsView1.FindControl("TextBox7"));
            // DropDownList status = (DropDownList)(DetailsView1.FindControl("DropDownList2"));
            TextBox TextBoxStatus = (TextBox)(DetailsView1.FindControl("TextBox12"));
            TextBoxStatus.Text = "Open";
            DropDownList list = (DropDownList)(DetailsView1.FindControl("DropDownList1"));
            TextBox9.Text = list.SelectedValue;
            DropDownList lists = (DropDownList)(DetailsView1.FindControl("DropDownList2"));
            TextBox14.Text = lists.SelectedValue;

            if (TextBoxRequestor.Text.Length <= 0)
            {
                TextBoxRequestor.Text = "Not Applicable";
            }
            if (TextBox14.Text.Length <= 0)
            {
                TextBoxDepartment.Text = "Not Provided";
            }
            if (TextBoxCompletionDate.Text.Length <= 0)
            {
                TextBoxCompletionDate.Text = "Not Provided";
            }
            if (TextBoxMachineDescription.Text.Length <= 0)
            {
                TextBoxMachineDescription.Text = "Not Provided";
            }

            if (TextBoxMachineLocation.Text.Length <= 0)
            {
                TextBoxMachineLocation.Text = "Not Provided";
            }

            if (TextBoxWorkRequired.Text.Length <= 0)
            {
                TextBoxWorkRequired.Text = "Not Provided";
            }

        successfull = true;
    }
    else
        {
            e.Cancel = true;
          successfull = false;
        }


    }

Именно здесь происходит фактическая вставка, это мой sqldatasource:

**все значения из item_inserting вставляются сюда со значением идентификатора **

protected void RequestorSource_Inserted(object sender, SqlDataSourceStatusEventArgs e)
        {
            if (successfull == true)
            {
                try
                {
                    int newid = (int)e.Command.Parameters["@NewId"].Value;
                    TextBox13.Text = newid.ToString();
                }
                catch
                {
                    successfull = false;
                }
               if (e.AffectedRows == 1 && successfull == true)
               {
                   successfull = true;
               }
               else
               {
                   successfull = false;
               }
            }
            else
            {
                successfull = false;
            }


        }

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

Это изображение моего просмотра деталей:

введите здесь описание изображения

**весь код .cs на http://pastebin.com/6VC6FZK7 и код .aspx на http://pastebin.com/QhjWNNt0 ** надеюсь, что это немного поможет.


person ExpertWannaBe    schedule 10.11.2015    source источник
comment
Пожалуйста, покажите код, который генерирует вставку и заполняет переменную successfull   -  person Matthew Verstraete    schedule 10.11.2015
comment
Я пытался отформатировать ваш код, но что-то не так или отсутствует. После if (TextBox9.Text == "Safety") есть два {, а в mm.Body строка "Work Required" объединяется с чем?   -  person Anderson Pimentel    schedule 10.11.2015
comment
@MatthewVerstraete, я добавил код, который ты просил, приятель   -  person ExpertWannaBe    schedule 11.11.2015
comment
@AndersonPimentel, теперь я исправил, пожалуйста, помогите.   -  person ExpertWannaBe    schedule 11.11.2015
comment
@MatthewVerstraete да, но важная часть вопроса, который я задал, заключалась в том, вставляются ли данные в sql, когда они проходят через item_inserted или item_inserting, тогда я могу установить для успешного выполнения значение true.   -  person ExpertWannaBe    schedule 11.11.2015
comment
Если вы опубликуете код С#, вызывающий эту вставку, я, возможно, смогу выяснить больше, но просто публикация необработанного SQL не показывает мне, выполняете ли вы какую-либо проверку и обработку ошибок. Как указано в моем ответе ниже, я считаю, что это ваша проблема. Каждый раз, когда я когда-либо вставляю/обновляю/удаляю данные из своих БД, я всегда проверяю, чтобы убедиться, что все в порядке и нет ошибок, прежде чем двигаться дальше и выполнять другие задачи.   -  person Matthew Verstraete    schedule 11.11.2015
comment
@MatthewVerstraete, я добавил весь код, который вы просили выше, пожалуйста, помогите   -  person ExpertWannaBe    schedule 11.11.2015
comment
Кажется, вам все еще не хватает кода. Насколько я понимаю, ваши пользователи нажимают кнопку, и это запускает DetailsView1_ItemInserting, но я не вижу, чтобы это что-то вызывало. Я не вижу кода, где объявлено successful. Пожалуйста, покажите весь код С# для всего процесса.   -  person Matthew Verstraete    schedule 11.11.2015
comment
@MatthewVerstraete, я добавил полную ссылку для приятеля cs и .aspx   -  person ExpertWannaBe    schedule 11.11.2015


Ответы (1)


Если вы просто установили для bool successful значение true после вставки и не выполнили проверку ошибок, это может привести к сбою и отправке электронного письма. Я предлагаю либо обернуть код insert в TRY..CATCH.. и установить состояние succssful в false в catch ИЛИ запустить IF...ELSE.., чтобы проверить, правильно ли были вставлены данные, и установить там состояние successful.

person Matthew Verstraete    schedule 10.11.2015
comment
да вот что я думаю - person ExpertWannaBe; 11.11.2015