如何删除datagridview上的选定行,这也反映到数据库中

本文关键字:数据库 何删除 删除 datagridview | 更新日期: 2023-09-27 17:59:43

我使用C#Window Form,我创建了一个连接到mySQL数据库的表单,它显示数据库列表、每个数据库上的表列表以及每个表的表内容。

我在这里有问题:

  1. 在表(datagridview)中选择一个随机单元格并单击"删除"按钮后,我希望在数据库中删除该行(对应于所选单元格)。

  2. 我还需要刷新和更新datagridview表的内容(该行已被删除)。(如果我知道如何做第一部分,我想我可以做这部分)

因此,我需要帮助解决问题1,其中一件事我无法弄清楚,那就是我如何编写SQL语句,将其放入SQLadapter或SQLcommandbuilder或其他任何东西中。我知道SQL语句应该是这样的:

从(选定的表)中删除哪里(这是我卡住的部分)=>我不知道在这种情况下该放什么,如何得到它?

非常感谢任何帮助和建议!

如何删除datagridview上的选定行,这也反映到数据库中

delete语句应该考虑datagridview中所有选定的表主键列和选定的行。

如何获取主键列:

SELECT `COLUMN_NAME`
 FROM `information_schema`.`COLUMNS`
WHERE (`TABLE_SCHEMA` = 'dbName')
  AND (`TABLE_NAME` = 'tableName')
  AND (`COLUMN_KEY` = 'PRI');

来源:获得主键列的更好方法

您的删除声明应该是什么样子:

DELETE FROM <TABLE> 
  WHERE <PRIMARY_KEY_COLUMN_1> = <ROW_VALUE_1>
    AND <PRIMARY_KEY_COLUMN_2> = <ROW_VALUE_2>

您可以看到,该表可以有多个列来唯一标识一行。还有一种可能性是,在另一个表上存在对该行的引用,这将阻止您删除它

它看起来是这样的:

List<string> primaryKeyColumns = GetPrimaryKeyColumns(SelectedDB, SelectedTable);
string deleteWhereClause = string.Empty;
foreach (string column in primaryKeyColumns)
{
    DataGridViewRow row = datagridview.CurrentCell.OwningRow;
    string value = row.Cells[column].Value.ToString();
    if (string.IsNullOrEmpty(deleteWhereClause))
    {
        deleteWhereClause = string.Concat(column, "=", value);
    }
    else 
    {
        deleteWhereClause += string.Concat(" AND ", column, "=", value);
    }
}
string deleteStatement = string.Format("DELETE FROM {0} WHERE {1}", SelectedTable, deleteWhereClause);

方法GetPrimaryKeyColumns使用我发布的select语句返回所选表的所有主键列的名称。您还必须处理其他类型的列,如日期和字符串,但基本上就是这样。