将新项添加到DataSet,将其写入Access DB

时间:2011-07-13 23:45:46

标签: c# .net dataadapter

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

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

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

3 个答案:

答案 0 :(得分:1)

适配器应在幕后自动为您生成insert语句。 您的代码看起来正确,但您的某个列可能存在约束,导致无法保存。 (就像你没有指定任何数据的非可空列一样)。但是,如果存在取消插入的约束,通常会出现异常。

您可以尝试其中一种替代方案,但它们基本相同:

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

答案 1 :(得分:1)

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

hCAliasDataSet.AcceptChanges();

然后使用TableAdapter提交数据库。

答案 2 :(得分:1)

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

例如......

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

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

相关问题