我尝试将数据插入图片所示表中的列ansatID
中。
用户拥有
DataGridView
中标记一行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
显示了实际结果。
答案 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();