C# 强类型数据集:添加数据后如何在数据库上保存数据?

C# 强类型数据集:添加数据后如何在数据库上保存数据?,c#,ms-access,strongly-typed-dataset,C#,Ms Access,Strongly Typed Dataset,我知道这是一个愚蠢的问题,我觉得自己很愚蠢,但我找不到正确(简单)的方法来完成我的任务。 我在VisualStudio2010中为一个C#项目导入了一个Access数据库:VS为我创建(谢谢!!)关于我的数据库的强类型数据集。干得好。 然后,在我的应用程序中,我创建了这个数据集的一个新实例CDS ds=new CDS()并在其表中添加记录。最后我做了ds.AcceptChanges()但数据库上没有任何操作。 好的,我在谷歌上搜索了Around并想(意识到了吗?)我必须打开一个db连接,创建一个

我知道这是一个愚蠢的问题,我觉得自己很愚蠢,但我找不到正确(简单)的方法来完成我的任务。
我在VisualStudio2010中为一个C#项目导入了一个Access数据库:VS为我创建(谢谢!!)关于我的数据库的强类型数据集。干得好。
然后,在我的应用程序中,我创建了这个数据集的一个新实例
CDS ds=new CDS()并在其表中添加记录。最后我做了
ds.AcceptChanges()但数据库上没有任何操作。
好的,我在谷歌上搜索了Around并想(意识到了吗?)我必须打开一个db连接,创建一个DataAdapter并用以下内容填充我的数据集:

CDS ds = new CDS();
OleDbConnection conn = new OleDbConnection(path_to_db);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM mytable", conn);
da.Fill(ds.Editori); //Editori is a TableTable created automatically
// Insert rows in dataset
if (ds.HasChanges()) ds.AcceptChanges();
int ret = da.Update(ds.Editori);
Debug.Print("Update() returns: {0}", ret);
conn.Close();
但ret=0,数据库上什么也不发生,而在DS.Editori中,我有106行

为了完成我的绝望:表mytable有一个自动递增字段作为主键;当我用da加载ds时,这个字段对于每个记录都是正确的,但是当我在ds上插入行时,记录有-1、-2、-3等等。。。为什么?

有人能告诉我使用强类型数据集的正确方法吗? 我会学习,读书,我保证,但现在我上班迟到了。。。 谢谢

更新:
根据devexpress的建议,我创建了insert命令,但结果是一样的:当我更新da时,db上什么也没有发生

OleDbCommand cmd = new OleDbCommand(
    "INSERT INTO Editori (ID,Editore) VALUES(?,?)", conn);
cmd.Parameters.Add("@ID", OleDbType.Integer);
cmd.Parameters.Add("@Editore", OleDbType.VarChar, 255, "Editore");
da.InsertCommand = cmd;
int ret = da.Update(ds.Editori);
Debug.Print("Update() returns: {0}", ret);
conn.Close();
另一个更新: 我解决了主键的问题:在生成的类中,我必须手动更改所有这些行:

this.columnID.AutoIncrementSeed = 1; // It was -1
this.columnID.AutoIncrementStep = 1; // It was -1

您还应该指定OleDBDataAdapter的UpdateCommand,然后通过调用da.Update方法来执行它。MSDN中有一个示例说明了如何做到这一点:


如果使用Visual Studio designer创建强类型数据集,则为该数据集创建的数据集或表格管理器中会有一个

MSDN给出了以下使用示例:

NorthwindDataSet northwindDataSet = new NorthwindDataSet();

NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = 
   new NorthwindDataSetTableAdapters.CustomersTableAdapter();
//Fill from database
customersTableAdapter.Fill(northwindDataSet.Customers);
//... changes to table
//Save changes to database
customersTableAdapter.Update(northwindDataSet.Customers);
或者,如果Visual Studio设计器创建了TableManager:

NorthwindDataSet northwindDataSet = new NorthwindDataSet();
TableAdapterManager northwindTableManager = new TableAdapterManager();

//Fill from database
northwindTableManager.CustomersTableAdapter.Fill(northwindDataSet.Customers);
//... changes to table
//Save changes to database
northwindTableManager.CustomersTableAdapter.Update(northwindDataSet.Customers);

我已经考虑过了,但是。。。为什么VS不自动创建它?我会尽量让你知道的。感谢您可以使用OleDbCommandBuilder类根据SELECT命令自动生成INSERT/UPDATE/DELETE语句。