Jedi Ablaza
Jedi Ablaza

Reputation: 171

Can't insert values from gridview to database

i cant seem to insert the data from the gridview to a database. i run it, and it runs smoothly but no data entry in my database. where is my error? i used for loop because the gridview may have more than 1 items per transaction. thanks!

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

Upvotes: 0

Views: 65

Answers (2)

Sami
Sami

Reputation: 3800

You need to put @ with parameter name like

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

You are passing control (Label) instead of control value(Label.Text), may be a typo. Update as below:

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

Upvotes: 1

sujith karivelil
sujith karivelil

Reputation: 29026

You Miss @ while representing the Command; Use like this:

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

MSDN says that: Use caution when you use this overload of the SqlParameter constructor to specify integer parameter values. Because this overload takes a value of type Object, you must convert the integral value to an Object type when the value is zero, as the following C# example demonstrates.

You can use the same like the following :

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;

Where SqlDbType is an enumeration that help you to specify the type of data.

Upvotes: 0

Related Questions