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

时间:2011-05-05 15:59:39

标签: c# ms-access strongly-typed-dataset

我知道这是一个愚蠢的问题,我觉得愚蠢,但我找不到完成任务的正确(简单)方法。
我在Visual Studio 2010中为C#项目导入了Access数据库:VS为我创建(感谢!!)关于我的数据库的强类型数据集。做得好。
然后,在我的应用程序中,我创建了此数据集CDS ds = new CDS();的新实例,并在其表中添加记录。最后我做ds.AcceptChanges();但没有任何事情发生在数据库上 好吧,我google了araound并思考(实现?!?)我必须打开一个数据库连接,创建一个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行!!

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

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

更新
正如Dev-Express所建议的,我创建了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

2 个答案:

答案 0 :(得分:1)

如果使用Visual Studio设计器创建了强类型DataSet,则会为该DataSet创建数据集或TableManager中的TableAdapters

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);

答案 1 :(得分:0)

您还应该指定OleDBDataAdapter的UpdateCommand,然后通过调用da.Update方法来执行它。有一个例子说明如何在MSDN中完成此任务:

OleDbDataAdapter.OleDbDataAdapter(String, OleDbConnection) Constructor