无法将值从网格视图插入到数据库

本文关键字:视图 插入 数据库 网格 | 更新日期: 2023-09-27 17:56:55

我似乎无法将数据从网格视图插入到数据库中。 我运行它,它运行顺利,但数据库中没有数据输入。 我的错误在哪里? 我使用 for 循环是因为网格视图每个事务可能有 1 个以上的项目。 谢谢!

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

无法将值从网格视图插入到数据库

您需要将参数名称与参数名称放在@中,例如

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

你在代表命令时错过了@;像这样使用:

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

MSDN 说: 使用 SqlParameter 构造函数的此重载时要小心 以指定整数参数值。因为这种重载需要 对象类型的值,则必须将整数值转换为对象 当值为零时键入,如以下 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是帮助您指定数据类型的枚举。