我无法弄清楚为什么下面的代码没有更新我的GridView和我的MySQL数据库。任何人都可以向我提供一些关于我可能做错了什么的提示吗?
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
connection();
GridViewRow row = GridView1.Rows[e.RowIndex];
Label lblID = (Label)row.FindControl("lblID");
TextBox textName = (TextBox)row.Cells[3].Controls[0];
TextBox textadd = (TextBox)row.Cells[4].Controls[0];
TextBox textc = (TextBox)row.Cells[5].Controls[0];
String query = "update employeeDB set [First Name:]='" + textName.Text + "', [Last Name:]='" + textadd.Text + "', [Email:]='" + textc.Text + "' where id='" + lblID + 1 + "'";
SqlCommand com = new SqlCommand(query, con);
SqlDataReader dr;
dr = com.ExecuteReader();
GridView1.EditIndex = -1;
bind();
}
这是我要求的绑定方法:
private void bind()
{
connection();
string query = "select * from employeeDB where [Last Name:] like'" + TextBox1.Text + "%'";
SqlDataAdapter da = new SqlDataAdapter(query, con);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}
答案 0 :(得分:3)
替换
dr = com.ExecuteReader();
与
com.ExecuteNonQuery();
ExecuteReader
适用于SELECT
次查询。
此外,在实际应用程序中,您不应该像您一样构建sql字符串。使用SqlParameter
来避免sql注入和许多其他错误。
答案 1 :(得分:1)
GridViewRow row = GridView1.Rows[e.RowIndex];
Label lblID = (Label)row.FindControl("lblID");
TextBox textName = (TextBox)row.Cells[3].Controls[0];
TextBox textadd = (TextBox)row.Cells[4].Controls[0];
TextBox textc = (TextBox)row.Cells[5].Controls[0];
/*are you sure column names are like [First Name:],[Last Name:] and [Email:] in the table*/
/*Syntax for update command should be like this "UPDATE TableName SET ColumnName1=@Parameter1, ColumnName2=@Parameter2 ....
* WHERE ColumnName=@ParameterName"
*/
String query = "update employeeDB set [First Name:]=@FirstName, [Last Name:]=@LastName, [Email:]=@Email where id=@id";
SqlCommand com = new SqlCommand(query, con);
com.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = textName.Text;
com.Parameters.Add("@LastName", SqlDbType.VarChar).Value = textadd.Text;
com.Parameters.Add("@Email", SqlDbType.VarChar).Value = textc.Text;
com.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(lblID.Text) + 1;
con.Open();
com.ExecuteNonQuery();
con.Close();
GridView1.EditIndex = -1;
bind();
}
答案 2 :(得分:0)
你应该做这样的事情
//从会话对象中检索表。 DataTable dt =(DataTable)Session [“TaskTable”];
//Update the values.
GridViewRow row = TaskGridView.Rows[e.RowIndex];
dt.Rows[row.DataItemIndex]["Id"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
dt.Rows[row.DataItemIndex]["Description"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked;
//Reset the edit index.
TaskGridView.EditIndex = -1;
//Bind data to the GridView control.
BindData();
答案 3 :(得分:0)
你现在得到了什么?例外或只是没有错误,什么也没发生?要检查的是数据库连接字符串 - 确保您的连接字符串指向您要定位的数据库。第二,我想指出查询是开放的sql注入攻击(你需要考虑的事情 - 如果你打算将它用于生产代码)。第三,你在bind方法中有什么?它试图绑定什么数据源以及具有什么控制权?从示例代码本身看,似乎没有从db返回数据。
更新时间: 顺便问一下,你的查询中是否应该有冒号?例如,参见名字后面的冒号([名字:])字符串查询="更新employeeDB集[名字:] ='" + textName.Text +"',[姓氏:] ='" + textadd.Text +"',[Email:] ='" + textc.Text +"'其中id ='" + lblID + 1 +"'&#34 ;;