【问题标题】:Database does not change after clearing all rows清除所有行后数据库没有变化
【发布时间】:2012-04-22 18:29:25
【问题描述】:

我在尝试用 C# 清除 DataTable 时遇到重大问题。

在编辑数据库中的信息时,我使用了类似的东西

somethingTableTableAdapter1.Update(greenParksDataSet);  
greenParksDataSet1.AcceptChanges();

而且效果很好。但是,在我的一个表格中,我有一个按钮来清除打开的表格。似乎清除了内存中的 DataTable,但实际上并未将更改传播到数据库。基本上代码归结为

greenParksDataSet.HistoryTable.RecieptIDColumn.AutoIncrementSeed = -1;
greenParksDataSet.HistoryTable.RecieptIDColumn.AutoIncrementSeed = -1;
greenParksDataSet.HistoryTable.RecieptIDColumn.AutoIncrementSeed = 1;
greenParksDataSet.HistoryTable.RecieptIDColumn.AutoIncrementSeed = 1;
greenParksDataSet.HistoryTable.Rows.Clear();


historyTableTableAdapter.Update(greenParksDataSet);
greenParksDataSet.AcceptChanges();

我试过搞乱事物的顺序,但似乎没有任何效果。单独使用该代码,DataTable 被清除(并且更改显示在 DataGridView 中),但是在之后添加historyTableTableAdapter.Fill(greenParksDataSet.HistoryTable); 时,显示数据库没有发生任何更改。

我可能遗漏了一些明显的东西,但多年来我一直对此感到困惑,如果有任何帮助,我将不胜感激。谢谢!

【问题讨论】:

标签: c# database datatable


【解决方案1】:

看看this question/answer

Clear 仅适用于内存中的数据表 - 它不会将它们标记为删除。

【讨论】:

  • 谢谢,有道理。但是,现在我得到了错误:Update requires a valid DeleteCommand when passed DataRow collection with deleted rows.
  • @Cesque 你的集合是否有一个有效的主键(即唯一的、非空的并且在元数据中这样表示)?如果您自己不提供删除命令,则只有当适配器知道它有一个能够在删除行时识别行的主键时,它才能删除它们。
  • 我确实有一个主键,但显然 DataSet 没有为 TableAdapter 生成 DeleteCommand。现在一切都解决了,我的桌子正在清理!万一有人遇到同样的问题,只需通过 TableAdapter 的 TableAdapter 配置向导来解决问题。
【解决方案2】:

我认为您正在使用绑定源,所以试试这个:

greenParksDataSet.HistoryTable.Rows.Clear();
HistoryTableBindingSource.EndEdit();

historyTableTableAdapter.Update(greenParksDataSet);
greenParksDataSet.AcceptChanges();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多