删除语句应考虑所有选定的表主键列和 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
使用我发布的选择语句返回所选表的所有主键列的名称。您还必须处理其他类型的列,例如日期和字符串,但这基本上就是您将拥有的。