向数据集添加新项,并将其写入Access DB

本文关键字:Access DB 数据集 添加 新项 | 更新日期: 2023-09-27 18:02:15

我通过使用DataAdapter写回我的Access数据库(.accdb)有问题。

目前,我有一个填充方法填充数据集表的数据。这段代码目前位于我的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()事件,这显然是添加一个新的行到Topcis表,位于hCAliasDataSet。

// 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来更新Topics表。我手动检查数据库,没有创建任何新行?

// Commit the changes back to the hCAlias DataBase (hcalias.accdb).
this.topicsTableAdapter.Update(this.hCAliasDataSet.Topics);
编辑:我相信我需要创建一个INSERT查询,为我的TableAdapter,这是正确的吗?

向数据集添加新项,并将其写入Access DB

适配器应该在幕后自动为您生成插入语句。您的代码看起来是正确的,但是您可能对其中一列有约束,使其无法保存。(比如没有为其指定任何数据的非空列)。但是,如果存在取消插入的约束,则通常会得到异常。

你可以尝试其中一种,但它们基本上是一样的:

this.topicsTableAdapter.Update (this.hCAliasDataSet);this.topicsTableAdapter.Update(博士);this.topicsTableAdapter.Insert (sTopicName);//添加其他列

你应该在你的数据集中调用AcceptChanges:

hCAliasDataSet.AcceptChanges();

然后用TableAdapter提交到数据库

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

例如…

this.topicsTableAdapter。Insert(int Column1, string Column2等)

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