我使用ADO.NET 数据集在我VB应用程序。我有一个输入数据集,与一位家长表和许多儿童表。我想产生身份的关键时我插入的数据进入父母表然后更新的数据中的所有儿童表与同样关键的(如国外键)。

最后,我想要更新的数据集中数据库(SQL Server08).

好了,上面的东西可以能够通过首插入父母表中的数据库直接获得身份列和比使用儿童表。

但我想要这个作为自动操作(就像皇宫的SQL这需要照顾的主要&外键属性.)

我这样的事情可能在数据集,这需要照顾自动生成列为父母和儿童表?

谢谢,

ABB

没有正确的解决方案

其他提示

我认为这应该是更加显而易见的,并应工作,没有任何调整。但是,它仍然是很容易的。

该方案有两个部分:

  1. 创建 DataRelation 之间的儿童和父母表,并将其设置为梯级上的更新。这样,每当父Id变化,所有儿童将被更新。

    Dim rel = ds.Relations.Add(parentTab.Columns("Id"), childTab.Columns("ParentId"))
    rel.ChildKeyConstraint.UpdateRule = Rule.Cascade
    
  2. 数据集插入和更新命令有两种方式:如果有任何输出参数或任何数据行返回的, 他们将用于更新数据集的行引起的更新。

    这是最有用于这个特定问题:越来越自动生成列 回来的应用程序。除了从身份,这可能是例如时间戳列。但是,身份是最有用的。

    我们所需要做的是设置插入命令返回的身份。有几种方法可做到这一点,例如:

    a)使用存储的过程和输出参数。这是最便携式方式之间的"真实"数据库。

    b)使用多个SQL声明,用最后一个回插行。这是据我所知,具体到SQL服务器,但是最简单的:

    insert into Parent (Col1, Col2, ...) values (@Col1, @Col2, ...);
    select * from Parent where Id = SCOPE_IDENTITY();
    

之后,设置此,所有你需要做的是建立父母行 Ids是唯一的(在单一的数据集),但不可能在数据库。负数通常是一个好的选择。然后,在保存数据集更改数据库,所有新的父排将得到真正的 Id从数据库。


注:如果你发生的工作数据库没有多个发言的支持并不存储程序(例如访问),则将需要安装事件处理程序 RowUpdated 事件在父母表中的适配器。在hanler你需要得到身份 select @@IDENTITY 命令。


一些链接:

几件事情要点。

  1. 是的,你肯定需要的关系分为两个表格中。你可以检查从文件编辑(双击你的文件文件)。通过默认的关系定为'关系,只有'这不具有任何更新的规则'.编辑这种关系通过进入编辑关系",然后选择"外国主要制约只有'或者'这两个~~~'之一。并且需要设置新的规则',因为梯级!'删除规则'。

  2. 现在当你使用一个新的父母表排的ID(自动增量)为新的儿童表行作为一个外国的关键,你必须添加父母的行为表第一次在你之前使用新的家长行的周围。

  3. 只要你调用更新的父母表中使用库中,删除,相关儿童表的新行将具有正确的parentID动。

我简单的代码段:

'--- Make Parent Row
Dim drOrder as TOrderRow = myDS.TOder.NewTOrderRow
drOrder.SomeValue = "SomeValue"
myDS.TOrder.AddTOrderRow(drOrder) '===> THIS SHOULD BE DONE BEFORE CHILD ROWS

'--- Now Add Child Rows!!! there are multiple ways to add a row into tables....
myDS.TOrderDetail.AddTOrderDetailRow(drOrder, "detailValue1")
myDS.TOrderDetail.AddTOrderDetailRow(drOrder, "detailvalue2")
'....
'....

'--- Update Parent table first
myTableAdapterTOrder.Update(myDS.TOrder)
'--- As soon as you run this Update above for parent, the new parent row's AutoID(-1)
'--- will become real number given by SQL server. And also new rows in child table will
'--- have the updated parentID

'--- Now update child table
myTableAdapterTOrderDetail.Update(myDS.TOrderDetail)

我希望它能帮助!

如果你不想使用的数据集,但获得分配给孩子的识别码与获得的ID,这样就可以更新你的模型: https://danielwertheim.wordpress.com/2010/10/ 24 / C-分批身份插入/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top