如何使用自动处理的DataSet - TableAdapterManager

时间:2014-11-09 17:39:13

标签: c# dataset tableadapter

(抱歉我的英语不好)

我已在Visual Studio 2013中将访问数据库导入到C#winform项目(.net 4.0)。它会自动创建一个带有DataSet,TableAdapter和TableAdapterManager的.cs文件。 我将数据从数据库导入DataSet,没有错误。我成功操作数据,并使用TableAdapterManager.UpdateAll()将更改保存到数据库。

但是现在我尝试插入表格之间关系的新数据。 例如,像我这样的数据库

父表: 自动密钥 string parentname

子表 自动密钥 字符串子名 int parentKey

首先尝试: 我使用parentTable.AddparenttableRow(data ...)创建一个新记录并获取parentRow。 我用childTable.AddchildtableRow(parentRow,data ...)

创建了一条新记录

但是如果我调用TableAdpaterManager.UpdateAll(),我会收到错误“无法添加或修改记录,因为在parentTable中需要相关记录”(不是真实的消息,而是翻译)。我认为AddchildtableRow创建了正确的关系。另一个问题出现了:由于错误,数据库没有被修改(这很好),但我添加的记录总是在DataSet的表中。

所以我尝试了另一种方法:TableAdpaterManager.tablenameTableAdpater.Insert() 首先,我插入一个parentRow没有任何问题。但是当我想插入childRow时,insert函数会询问父键。但我没有它(插入父调用不返回密钥)。

我的问题是:如何使用DataSet,TableAdapter和TableAdapterManager在DataSet和数据库中插入记录,并使用事务(如果有错误,数据将不会写入数据库,并且不会被添加到DataSet中)?实际上,如何正确使用这些类?

1 个答案:

答案 0 :(得分:0)

查找键入的数据集代码。在默认TableAdapterManager.UpdateOrderOption.InsertUpdateDeleteUpdateInsertDeletemsdn)之间切换。对于分层更新,您必须合并标识列的新值(msdn)。另请参阅this post。 ADO.NET处理防止与其断开连接的数据集冲突的方式,它分配负IDENTITY列值,因为它不知道可能的正数,因为它已断开连接而不是冲突。 managing a @@identity crisis with parent-child relations也是{{3}}。类型化数据集技术也存在循环表引用的问题。