2016-07-14 16 views
0

Ich kann nicht scheinen, die Daten aus der Gridview in eine Datenbank einzufügen. Ich laufe es, und es läuft reibungslos, aber keine Dateneingabe in meiner Datenbank. Wo ist mein Fehler? Ich habe for-Schleife verwendet, weil die Gridview mehr als 1 Elemente pro Transaktion haben kann. Vielen Dank!Kann keine Werte aus der Gridview in die Datenbank einfügen

protected void btnSave_Click(object sender, EventArgs e) 
    { 
     string transIDs = transID.Text; 
     string datefiled = lblDateFiled.Text; 
     string requisitioner = txtName.Text; 
     string company = txtComp.Text; 
     string branch = txtBranch.Text; 
     string bu = txtBU.Text; 
     string dept = txtDept.Text; 
     string sec = txtSec.Text; 
     string reason = txtReason.Text; 



     int accept = 0; 

     if(rblAccept.SelectedIndex == 0) 
     { 
      accept = 1; 
     } 
     else 
     { 
      accept = 0; 
     } 

     //foreach (GridViewRow row in gvModal.Rows) 
     //{ 

     for(int i = 0; i < gvModal.Rows.Count; i++) 
     { 

      string dateA = DateTime.Now.ToString("yyyy-MM-dd"); 

      Utility u = new Utility(); 
      string conn = u.connect(); 

      Label type = (Label)gvModal.Rows[i].Cells[1].FindControl("lbltype"); 
      Label model = (Label)gvModal.Rows[i].Cells[2].FindControl("lblModel"); 
      Label quantity = (Label)gvModal.Rows[i].Cells[3].FindControl("lblQuan"); 
      Label unit = (Label)gvModal.Rows[i].Cells[4].FindControl("lblUnit"); 

      //string type = row.Cells[1].Text; 
      //string model = row.Cells[2].Text; 
      //string quantity = row.Cells[3].Text; 
      //string unit = row.Cells[4].Text; 

      SqlConnection connUser = new SqlConnection(conn); 
      SqlCommand read = connUser.CreateCommand(); 

      string query = "INSERT INTO Mosef_Alert values (@Mosef_No, @Branch, @BU, @Dept, @Section, @Requisitioner, @Accepted, @Date_Accepted, @Reason, @MOSEF_Date, @type, @model, @quantity, @unit)"; 

       connUser.Open(); 
       read.CommandText = query; 

       read.Parameters.Add(new SqlParameter("Mosef_No", transIDs)); 
       read.Parameters.Add(new SqlParameter("Branch", branch)); 
       read.Parameters.Add(new SqlParameter("BU", bu)); 
       read.Parameters.Add(new SqlParameter("Dept", dept)); 
       read.Parameters.Add(new SqlParameter("Section", sec)); 
       read.Parameters.Add(new SqlParameter("Requisitioner", requisitioner)); 
       read.Parameters.Add(new SqlParameter("Accepted", accept)); 
       read.Parameters.Add(new SqlParameter("Date_Accepted", dateA)); 
       read.Parameters.Add(new SqlParameter("Reason", reason)); 
       read.Parameters.Add(new SqlParameter("MOSEF_Date", lblDateFiled.Text)); 
       read.Parameters.Add(new SqlParameter("type", type)); 
       read.Parameters.Add(new SqlParameter("model", model)); 
       read.Parameters.Add(new SqlParameter("quantity", quantity)); 
       read.Parameters.Add(new SqlParameter("unit", unit)); 

       //read.ExecuteNonQuery(); 

       read.Parameters.Clear(); 

     } 
     System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
     sb.Append(@"<script type ='text/javascript'>"); 
     sb.Append("alert('Records Updated');"); 
     sb.Append("$('editModal').modal('hide');"); 
     ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "EditHideModalScript", sb.ToString(), false); 
    } 
+0

Hallo @Jedi, erhalten Sie einen Fehler? – Sami

+0

@Sami, yeah mein Fehler zeigt "Zusätzliche Informationen: Keine Zuordnung existiert vom Objekttyp System.Web.UI.WebControls.Label zu einem bekannten verwalteten Provider nativen Typ." –

+0

Nur bemerkt, Sie übergeben Kontrolle (Label) nicht Wert wie Label.Text. Ich sehe meine aktualisierte Antwort. – Sami

Antwort

1

Sie müssen @ mit Parameternamen setzen wie

  read.Parameters.Add(new SqlParameter("@Mosef_No", transIDs)); 
      read.Parameters.Add(new SqlParameter("@Branch", branch)); 
      read.Parameters.Add(new SqlParameter("@BU", bu)); 
      read.Parameters.Add(new SqlParameter("@Dept", dept)); 
      read.Parameters.Add(new SqlParameter("@Section", sec)); 
      read.Parameters.Add(new SqlParameter("@Requisitioner", requisitioner)); 
      read.Parameters.Add(new SqlParameter("@Accepted", accept)); 
      read.Parameters.Add(new SqlParameter("@Date_Accepted", dateA)); 
      read.Parameters.Add(new SqlParameter("@Reason", reason)); 
      read.Parameters.Add(new SqlParameter("@MOSEF_Date", lblDateFiled.Text)); 
      read.Parameters.Add(new SqlParameter("@type", type)); 
      read.Parameters.Add(new SqlParameter("@model", model)); 
      read.Parameters.Add(new SqlParameter("@quantity", quantity)); 
      read.Parameters.Add(new SqlParameter("@unit", unit)); 

Sie passieren Kontrolle (Label) statt Steuerwert (Label.Text) kann ein Tippfehler sein. Update wie folgt:

read.Parameters.Add(new SqlParameter("@type", type.Text)); 
    read.Parameters.Add(new SqlParameter("@model", model.Text)); 
    read.Parameters.Add(new SqlParameter("@quantity", quantity.Text)); 
    read.Parameters.Add(new SqlParameter("@unit", unit.Text)); 
0

Sie vermissen @ während Sie den Befehl darstellen; Verwenden Sie wie folgt aus:

read.Parameters.Add(new SqlParameter("@Mosef_No", transIDs)); 
read.Parameters.Add(new SqlParameter("@Branch", branch)); 
read.Parameters.Add(new SqlParameter("@BU", bu)); 

MSDN sagt, dass: Vorsicht, wenn Sie diese Überlastung des Konstruktor SqlParameter verwenden integer Parameterwerte angeben. Da diese Überladung einen Wert des Typs Object erfordert, müssen Sie den Integralwert in einen Objekt Typ konvertieren, wenn der Wert Null ist, wie das folgende C# -Beispiel veranschaulicht.

können Sie die gleiche wie die folgende verwenden:

read.Parameters.Add("@Mosef_No",SqlDbType.Int).Value= transIDs; 
read.Parameters.Add("@Branch",SqlDbType.VarChar).Value= branch; 
read.Parameters.Add("@BU",SqlDbType.Char).Value= bu; 

Wo SqlDbType ist eine Aufzählung, die Ihnen helfen, die Art der Daten zu spezifizieren.

Verwandte Themen