无法将gridview中的值插入数据库

时间:2016-07-14 01:10:12

标签: c# asp.net gridview

我似乎无法将gridview中的数据插入数据库。我运行它,它运行顺利但我的数据库中没有数据输入。我的错误在哪里?我用于循环,因为gridview每个事务可能有多个项目。谢谢!

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

2 个答案:

答案 0 :(得分:1)

您需要将@添加为参数名称,如

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

您传递的是控件(Label)而不是控件值(Label.Text),可能是拼写错误。更新如下:

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

答案 1 :(得分:0)

你在代表命令时错过了@;使用方式如下:

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

MSDN说:当你使用SqlParameter构造函数的这个重载时要小心   指定整数参数值。因为这个过载需要一个   类型为Object的值,必须将整数值转换为Object   当值为零时键入,如下面的C#示例所示。

您可以使用以下相同的内容:

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;

其中SqlDbType是一个帮助您指定数据类型的枚举。