我有一行显示删除按钮,永久删除数据库,如何从数据库中删除数据?
以下代码显示每行的删除按钮。我有用户Oracle数据库 我在哪里写删除查询?
DataGridViewLinkColumn Deletelink = new DataGridViewLinkColumn();
Deletelink.UseColumnTextForLinkValue = true;
Deletelink.HeaderText = "delete";
Deletelink.DataPropertyName = "lnkColumn";
Deletelink.LinkBehavior = LinkBehavior.SystemDefault;
Deletelink.Text = "Delete";
dataGridView1.Columns.Add(Deletelink);
我已经编写了删除代码,但我失败了
private void dataGridView1_CellContentClick(object sender DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 5)
{
empid = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["empid"].Value);
OleDbDataAdapter adp = new OleDbDataAdapter("delete from apps where appsid= '"+empid+"'", con);
DataTable dt = new DataTable();
adp.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
答案 0 :(得分:0)
作为OleDbDataAdapter的构造函数发出的删除命令不正确。但是,适配器仍然会执行命令。但是你肯定不能指望使用删除命令来填充数据表 你还需要一个SELECT。
通常这样做是从网格中删除行(这将基础行标记为已删除然后,当您要将更改保存到数据库时,应使用原始DataAdapter和原始行DataTable用于初始填充网格以发出Update method
这里有很好的解释Using OleDbDataAdapter to Update a DataTable
或者您可以使用单独的命令自行更新并重新加载数据表
// Delete the record on the db
empid = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["empid"].Value);
OleDbCommand cmd = new OleDbCommand("delete from apps where appsid= @id", con);
cmd.Parameters.Add("@id", OleDbType.VarWChar).Value = empid;
cmd.ExecuteNonQuery();
// reload the grid with the updated info from the db
OleDbDataAdapter da = new OleDbDataAdapter("Select * from apps", con);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
这当然有一个缺点,就是每次删除一行时都会打两次数据库并重新加载所有内容。