首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将网格视图文本框值插入Mysql数据库

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

Stack Overflow用户
提问于 2015-12-18 09:39:20
回答 1查看 169关注 0票数 0

我的第二个错误

我正在尝试插入显示在数据库网格视图中的textbox值,但是在给我带来一些错误的cs页面中,我不知道我在哪里出错。

代码语言:javascript
复制
<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码

代码语言:javascript
复制
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);
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-18 09:40:54

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

但更重要的是,您应该始终使用参数化查询。这种字符串连接对于SQL注入攻击是开放的。

并使用语句自动释放连接和命令。

顺便说一句,由于您试图对数据库进行INSERT,所以只需要调用方法而不是使用MySqlDataAdapter。由于您尝试插入,因此没有数据可以填充您的DataTable。我建议重新考虑一下你的设计。

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

代码语言:javascript
复制
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保留关键字 in MySQL。取决于数据库提供程序是否区分大小写,您可能需要将其更改为非保留字。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34352514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档