我知道这是一个愚蠢的问题,我觉得愚蠢,但我找不到完成任务的正确(简单)方法。
我在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
答案 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