我的表单中有一个DataGrid
和一个删除按钮。当我单击删除按钮时,它应该从我的Access数据库中删除所选的datagrid行。但它只是从数据网格而不是数据库中删除。当我再次加载表单时,删除的行仍然存在。这是我删除按钮的代码:
con.Open();
OleDbCommand comnd = new OleDbCommand();
comnd.Connection = con;
string q = "delete from customers";
comnd.CommandText = q;
comnd.ExecuteNonQuery();
MessageBox.Show("delete");
答案 0 :(得分:1)
因此,您尝试使用以下查询从数据库中删除单行:
delete from customers
问题是此查询未指定应受其影响的行。您必须了解此处的DataGrid与您的DataBase不同。
为了从数据库中删除特定行,您还应该指定它是哪一行。例如,您可以告诉它删除具有特定ID的行:
delete from customers where id = 7
上述查询将删除ID为7的所有行。但这只是一种可能的方法。
为此,您实际上需要在表格中id
。以下代码来自MSDN源。它删除具有来自datagrid的特定id的条目:
int ID = (int) datagrid.DataKeys[(int) e.Item.ItemIndex];
string sql = "DELETE FROM PetTable WHERE ID=" + ID;
ExecuteNonQuery(sql);
有关详细信息,请read this。
答案 1 :(得分:1)
你需要遍历选定的行,删除所有类似下面的内容
foreach (DataGridViewRow row in datagrid1.SelectedRows)
{
//get key
int rowId = Convert.ToInt32(row.Cells[indexWhereIdStored].Value);
// your delete logic
}
如果您需要删除一个选定的行,假设第一列是键
if (datagrid1.SelectedRows.Count > 0)
{
int selectedIndex = datagrid1.SelectedRows[0].Index;
// gets the RowID from the first column in the grid
int rowID = int.Parse(datagrid1[0, selectedIndex].Value.ToString());
// you can create a parameter for the @RowID
string sql = "DELETE FROM YourTable WHERE RowID = @RowID";
// your code for deleting it from the database
// refreshing the DataGridView
}
答案 2 :(得分:0)
在您的SQL查询中,您错过了WHERE语句,以指示您要删除的客户的ID
答案 3 :(得分:0)
我们做到了。我在where子句中使用name而不是Id来处理数据类型异常。这是删除按钮的工作代码。 `
`con.Open();
OleDbCommand comnd = new OleDbCommand();
comnd.Connection = con;
string q = "delete from customers where CustomerName='"
+ txtName.Text + "'";
comnd.CommandText = q;
comnd.ExecuteNonQuery();
MessageBox.Show("delete");