当我应用此查询时,它会更新所有数据,而不是根据所选的grpid更新记录。 grpID是自动genetrated grpID列,剩下的coloumns是
stdrno,stdnames,session,disipline,cntno,email
private void btnupdate_Click(object sender, EventArgs e)
{
string query = "update tbl_grp set Stdrno='" + stdrnoTextBox.Text + "',Stdnames='" + stdnamesTextBox.Text + "',Disipline='" + disiplineComboBox.Text + "',Session='" + sessionTextBox.Text + "',Cntno='" + cntnoTextBox.Text + "',Email='" + emailTextBox.Text + "' where GrpID= ''";
SqlCommand comand = new SqlCommand(query, connn);
SqlDataReader datareader;
try
{
connn.Open();
datareader = comand.ExecuteReader();
MessageBox.Show("Record Updated!", "Updation Success", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
while (datareader.Read())
{
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:1)
首先,请永远不要再连接sql参数,这里是WHY。而是使用参数化查询,如下例所示。其次,您似乎忘记为GrpID
过滤器设置值,但在这种情况下,没有任何实体应该更新。
const string sqlUpdateQuery = @"
UPDATE
tbl_grp
SET Stdrno = @stdrno
Stdnames = @stdnames
...
WHERE GrpID = @grpid
";
using (var connection = new SqlConnection(connectionString)
{
connection.Open();
using (var command = new SqlCommand(sqlUpdateQuery, connection))
{
command.Parameters.AddWithValue("stdrno", stdrnoTextBox.Text);
command.Parameters.AddWithValue("stdnames", stdnamesTextBox.Text);
command.Parameters.AddWithValue("grpid", grpidVariable);
// ... //
command.ExecuteNonQuery();
}
}