代码正在运行,但是UPDATE语句不会更新数据

时间:2019-05-02 20:53:51

标签: c# sql-server winforms datagridview sql-update

我尝试将数据插入图片所示表中的列ansatID中。

用户拥有

  • DataGridView中标记一行
  • 将其ID插入左侧的textBox1
  • 然后按下按钮Tilføj ansat til vagten

及其ID应该插入ansatID和数据库中的DataGridView列中。

但是问题是,尽管代码正在运行,但是数据没有插入数据库的ansatID列和DataGridView的列中。我尝试了以下代码:

private void button5_Click(object sender, EventArgs e)
{
    try
    {
        String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
        SqlConnection myconnection = new SqlConnection(ConnectionString);

        myconnection.Open();

        DateTime id= Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
        SqlCommand AddNumberCommand = myconnection.CreateCommand();
        AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = '" + id + "'";

        AddNumberCommand.Parameters.Add("@ansatID", SqlDbType.Int).Value = textBox1.Text;

        AddNumberCommand.ExecuteNonQuery();

        myconnection.Close();
        MessageBox.Show("Du har valgt vagten.");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

预期结果是,ansatID应该同时插入数据库的ansatID列和DataGridView中。数据库中的表和图片上的DataGridView显示了实际结果。

Picture

Picture

1 个答案:

答案 0 :(得分:0)

datetime值引起了问题。在查询中的where子句中,日期值不返回任何值,因此更新未完成。您可以在查询的ID上使用datetime对象的ToString方法,如下所示:

 AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = '" + id.ToString("yyyy-MM-dd HH:mm:ss") + "'";

但是您应该使用参数来避免注入攻击。因此,我建议您使用以下代码段:

AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = @value";
AddNumberCommand.Parameters.Add("@ansatID", SqlDbType.Int).Value = textBox1.Text;
AddNumberCommand.Parameters.Add("@value",SqlDbType.DateTime).Value=id;
AddNumberCommand.ExecuteNonQuery();