繁体   English   中英

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

[英]Strongly-typed dataset: how to save data on db after adding data?

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

为了完成我的绝望,表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

如果使用Visual Studio设计器创建了强类型数据集,则在为该数据集创建的数据集或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);

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

OleDbDataAdapter.OleDbDataAdapter(String,OleDbConnection)构造函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM