【问题标题】:Adding a new item to a DataSet, writing it to Access DB向 DataSet 添加新项目,将其写入 Access DB
【发布时间】:2011-10-04 22:40:21
【问题描述】:

我在使用 DataAdapter 回写 Access 数据库 (.accdb) 时遇到问题。

目前,我有一个 Fill 方法,它用数据填充 DataSet 表。这段代码目前位于我的 Form_Load() 中。

// TODO: This line of code loads data into the 'hCAliasDataSet.Topics' table.   You can move, or remove it, as needed.
this.topicsTableAdapter.Fill(this.hCAliasDataSet.Topics);

然后我有一个 cmdAdd_Click() 事件,这显然是在位于 hCAliasDataSet 内的 Topcis 表中添加一个新行。

// Create a new row, append it to Topics table.
DataRow DR;
DR = this.hCAliasDataSet.Tables["Topics"].NewRow();
this.hCAliasDataSet.Tables["Topics"].Rows.Add(DR); 

接下来,我创建了一些代码来捕获一个列值的输入。

        // Capture user input
        sTopicName = Interaction.InputBox("Please Enter Topic Name", "Topic Name", null, 100, 100);
        // Set the Topic value for the new Row
        DR["Topic"] = sTopicName;

我的问题,我假设在这里,我调用 dataAdapter 来更新主题表。我手动检查数据库,并没有创建任何新行?

// Commit the changes back to the hCAlias DataBase (hcalias.accdb).
this.topicsTableAdapter.Update(this.hCAliasDataSet.Topics);

编辑:我相信我需要为我的 TableAdapter 创建一个 INSERT 查询,这是否正确?

【问题讨论】:

标签: c# .net dataadapter


【解决方案1】:

Update() 方法只是更新现有记录,您需要使用 TableAdapter Insert() 方法来添加新行。 VC# 会为您创建一个默认的 Insert() 方法,(可能会被重载)...但是会有一个方法可以让您显式插入值....

例如...

this.topicsTableAdapter.Insert(int Column1, string Column2 etc etc)

这将在您的数据库中创建一个新行并使用您指定的值填充它。

【讨论】:

  • 感谢 Chris,在听取了 Devin 的回复后,我查看了 VS 为我创建的 Insert 语句。
【解决方案2】:

您应该在数据集中调用 AcceptChanges:

hCAliasDataSet.AcceptChanges();

然后使用您的 TableAdapter 提交到数据库。

【讨论】:

  • 感谢您的输入,我已经调用了 AcceptChanges()。不幸的是,它对我不起作用。
【解决方案3】:

适配器应该在后台自动为您生成插入语句。 您的代码看起来正确,但您的某一列可能存在限制,导致无法保存。 (例如您没有为其指定任何数据的不可为空的列)。但是,如果存在取消插入的约束,您通常会遇到异常。

您可以尝试其中一种替代方法,但它们基本上是一样的:

this.topicsTableAdapter.Update(this.hCAliasDataSet); this.topicsTableAdapter.Update(DR); this.topicsTableAdapter.Insert(sTopicName); // 在此处添加任何其他列

【讨论】:

  • 谢谢德文。插件完成了这项工作。我发现几乎没有其他事情我也必须在 DataSet 上将“强制约束”属性更改为 True。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2011-08-10
  • 1970-01-01
  • 2015-08-28
相关资源
最近更新 更多