【发布时间】:2019-05-02 20:53:50
【问题描述】:
我尝试将数据插入到图片所示表格中的ansatID 列。
用户有
- 在
DataGridView中标记一行 - 在左侧的 textBox1 中插入他的 ID
- 然后按下按钮
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 显示了实际结果。
【问题讨论】:
-
WHERE 子句中的变量也可以并且应该是参数。
-
您需要始终使用参数,而不仅仅是某些时候。你为 ansatID 使用一个参数做得很好,为什么你不为 Dato 使用一个参数?它没有更新您的 gridview 的原因是您需要再次绑定网格。
-
在处理涉及时间组件的更新时,您可能会在尝试解析毫秒(或更小增量)时遇到问题。而是让您的网格公开一个主键并在 ADO.NET 中使用它来执行更新。您不需要在网格上显示主键。
标签: c# sql-server winforms datagridview sql-update