2015-11-10 5 views
0

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

Это мой подробности Просмотреть Inserted Метод:

 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() 

я просто логическое значение преуспевающим; который я установлен в истинное значение в конце метода Item_Inserting()

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

защищен недействительным DetailsView1_ItemInserting (объект отправителя, DetailsViewInsertEventArgs е) {

 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; 
      } 


     } 

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

Это картина из моих деталей просмотра:

enter image description here

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

+0

Пожалуйста, покажите код, который генерирует вставку и заполняет переменную 'successl' – Matthew

+0

Я попытался отформатировать ваш код, но что-то не так или нет. После 'if (TextBox9.Text ==" Безопасность ")' есть два '' '' и '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Обязательно '') –

+0

@MatthewVerstraete Я добавил код, который вы попросили приятеля – ExpertWannaBe

ответ

0

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

+0

yea thats what im thinking – ExpertWannaBe