当我将更新查询应用于表更新时,我的所有数据都没有被选中一次

时间:2015-06-26 17:30:26

标签: c#

当我应用此查询时,它会更新所有数据,而不是根据所选的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);
        }
    }

1 个答案:

答案 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();
    }
}