我的第二个错误

我正在尝试插入显示在数据库网格视图中的textbox值,但是在给我带来一些错误的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);
}
}发布于 2015-12-18 09:40:54
您需要将MySqlConnection而不是连接字符串作为MySqlCommand构造函数中的第二个参数传递。错误消息清楚地指出,没有new MySqlCommand(string, string)那样的重载,但是有new MySqlCommand(string, MySqlConnection)那样的重载。
但更重要的是,您应该始终使用参数化查询。这种字符串连接对于SQL注入攻击是开放的。
并使用语句自动释放连接和命令。
顺便说一句,由于您试图对数据库进行INSERT,所以只需要调用方法而不是使用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是保留关键字 in MySQL。取决于数据库提供程序是否区分大小写,您可能需要将其更改为非保留字。
https://stackoverflow.com/questions/34352514
复制相似问题