我的第二次错误
我试图将gridview中存在的文本框值插入到数据库中,但是在cs页面中给出了一些错误,我不知道我哪里出错了。
<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);
}
}
答案 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。根据您的数据库提供程序是否区分大小写,您可能需要将其更改为非保留字。