.net – 如何使用自动生成的身份密钥更新数据集父子表?
我在VB应用程序中使用ADO.NET数据集.我有一个带有一个父表和许多子表的类型化数据集.我想在将数据插入父表时生成身份密钥,然后使用相同的密钥(作为Foregin密钥)更新所有子表中的数据.
最后,我想更新数据库(SQL Server08)中的数据集. 那么,上面的事情可以通过首先在数据库中直接插入父表,获取Identity列而不是用于Child表. 但是我想把它作为一个自动操作(就像LINQ to SQL一样,它处理datacontext中的Primary& Foreign键.) 我在Dataset中可以处理父表和子表的Autogenerated列吗? 谢谢, ABB
我认为这应该更加明显,应该没有任何调整.但是,它仍然很容易.
解决方案有两个部分: >在子表和父表之间创建DataRelation,并将其设置为在更新时级联. Dim rel = ds.Relations.Add(parentTab.Columns("Id"),childTab.Columns("ParentId")) rel.ChildKeyConstraint.UpdateRule = Rule.Cascade >数据集插入和更新命令是双向的: 这对于此特定问题最有用:获取自动生成的列 我们需要做的就是设置insert命令来返回身份. a)使用带有输出参数的存储过程.这是“真实”数据库中最便携的方式. b)使用多个SQL语句,最后一个返回插入的行.这是特定于SQL Server的AFAIK,但最简单的: insert into Parent (Col1,Col2,...) values (@Col1,@Col2,...); select * from Parent where Id = SCOPE_IDENTITY(); 设置完成后,您需要做的就是创建具有唯一ID的父行(在单个数据集中),但在数据库中是不可能的.负数通常是一个不错的选择.然后,当您将数据集更改保存到数据库时,所有新的父行将从数据库中获取实际ID. 注意:如果您碰巧使用没有多语句支持且没有存储过程(例如Access)的数据库,则需要在父表适配器中的RowUpdated事件上设置事件处理程序.在hanler中,您需要通过select @@ IDENTITY命令获得身份. 一些链接: > MSDN: Retrieving Identity or Autonumber Values (ADO.NET) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |