无法将网格视图文本框值插入Mysql数据库

时间:2015-12-18 09:39:20

标签: c# asp.net

我的第二次错误

My Second Errord我试图将gridview中存在的文本框值插入到数据库中,但是在cs页面中给出了一些错误,我不知道我哪里出错了。

enter image description here

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField HeaderText="Names">
            <ItemTemplate>
                <asp:TextBox ID="txtStudent_Name" runat="server" Text='<%# Eval("StudentFirstName") %>' ></asp:TextBox>
            </ItemTemplate>
             </asp:TemplateField>
         <asp:TemplateField HeaderText="Register Number">
             <ItemTemplate>
                <asp:TextBox ID="txtreg_number" runat="server" Text='<%# Eval("StudentRegID") %>' ></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>

             <asp:TemplateField HeaderText="Total Marks">
             <ItemTemplate>
                <asp:TextBox ID="txttotal_marks" runat="server" Text='' ></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
         <asp:TemplateField HeaderText="Marks Scored">
             <ItemTemplate>
                <asp:TextBox ID="txtmarks_scored" runat="server" Text='' ></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>

    </Columns>
</asp:GridView>

CS代码

protected void Button1_Click(object sender, EventArgs e)
        {
            GridView1.Visible = true;
            DataTable dt = new DataTable();
            DataRow row = dt.NewRow();
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                TextBox txtUsrId = (TextBox)GridView1.Rows[i].FindControl("txtStudent_Name");
                string UserID = txtUsrId.Text;
                string query = "insert into details (name) values('" + UserID + "')";
                MySqlCommand cmd = new MySqlCommand(query, constr);
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                da.Fill(dt);
            }
        }

1 个答案:

答案 0 :(得分:3)

您需要将MySqlConnection而不是连接字符串作为MySqlCommand构造函数中的第二个参数传递。错误消息清楚地表明,new MySqlCommand(string, string)没有重载,但 重载为new MySqlCommand(string, MySqlConnection)

但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

并使用using statement自动处理您的连接和命令。

顺便说一下,由于您尝试INSERT到您的数据库,您只需拨打ExecuteNonQuery method而不是MySqlDataAdapter。由于您尝试插入,因此没有数据可以填充DataTable。我建议重新考虑你的设计。

顺便说一下,我通常会使用这些语法;

using(var con = new MySqlConnection(conStr))
using(var cmd = con.CreateCommand())
{
    cmd.CommandText = "insert into details (`name`) values(@id)";
    con.Open();
    for (int i = 0; i < GridView1.Rows.Count; i++)
    {
         cmd.Parameters.Clear();
         TextBox txtUsrId = (TextBox)GridView1.Rows[i].FindControl("txtStudent_Name");    
         cmd.Parameters.Add("@id", MySqlDbType.VarChar).Value = txtUsrId.Text;
         cmd.ExecuteNonQuery();
    }
}

NAME是MySQL中的reserved keyword。根据您的数据库提供程序是否区分大小写,您可能需要将其更改为非保留字。