如何使用具有绑定数据集的 VS19 获取父记录的Scope_identity值



我在MSSQL中有两个表,它们tbl1.PKtbl2.PK相关,tbl2FK(_tbl1PK)

我在Visual Studio中创建了一个数据集,它们以关系显示 当我将表作为数据网格拖放到表单上时,我得到了父 DG 和子 DG。 VS 添加了绑定导航器,该导航器添加了保存过程

tbl1.bindingsource.endedit
tableadaptermanager.updateall

当我将数据添加到父DG并按保存时,数据将保存到数据库中。 当我添加新的父母,然后添加新的子详细信息并按保存时,我得到

System.Data.SqlClient.SqlException:"INSERT 语句与 FOREIGN KEY 约束 "FK_tblChild_tblParent" 冲突。冲突发生在数据库"xxxxx"中,表"dbo.tblParent",列"PK"。

我尝试更新parentTableadapter然后ds.acceptchanges但我无法更新新的子行。

我明白为什么,但我的问题是:

  • VS IDE不应该处理这个问题吗?

  • 如果不适合我,所以我认为我需要获得新tbl1PK(scope_identity)。

我可以在数据集代码中看到插入命令:

Me._adapter.InsertCommand.CommandText = "INSERT INTO [] FROM tbl1 WHERE (PK= SCOPE_IDENTITY())"

但是我一生都看不到如何获得这个价值。
我有很多表,有很多列,这就是为什么我想/需要使用 IDE 的强大功能来填充和绑定我的控件,所以我真的不想走手动创建数据集的路线。

我已经对此进行了搜索和搜索,但找不到任何说明如何使用VS自动生成的代码执行此操作的内容。

谢谢

John

我刚刚测试过,InsertCommand中查询的添加是自动发生的,所以你一定没有正确地做某事。 这正是我所做的:

  1. 通过 SSMS 在本地默认 SQL Server 实例上创建了一个名为"测试"的新数据库。
  2. 添加了一个名为 Parent 的表,其中包含列 ParentId(int、PK、identity)和 ParentName (varchar)。
  3. 添加了一个名为 Child 的表,其中包含列 ChildId (int, PK, identity)、ParentId (int) 和 ChildName (varchar)。
  4. 在"子"表中从"父"表中的"父 ID"列
  5. 创建外键到"父级 ID"列,并将"更新规则"设置为"级联"。
  6. 创建了一个新的 VB Windows 窗体应用程序项目。
  7. 通过"数据源"窗口为"测试"数据库添加了新的数据源。
  8. 从数据集设计器中的解决方案资源管理器打开测试数据集。
  9. 选择了两个数据表之间的数据关系。
  10. 在"属性"窗口中,单击"编辑关系"。
  11. 选中"关系和外键约束",当更新规则自动更改为级联时。

在这一点上,但即使在步骤 7 之后,我也能够在设计器中选择 ParentTableAdapter,展开 InsertCommand 并查看 CommandText 以查看以下内容:

INSERT INTO [dbo].[Parent] ([ParentName]) VALUES (@ParentName);
SELECT ParentId, ParentName FROM Parent WHERE (ParentId = SCOPE_IDENTITY())

如果您没有看到,您可以自己设置。 现在发生的情况是,当执行 InsertCommand 以插入新记录时,该查询会立即将该记录中的数据检索回数据集中的 DataRow。 这将使用新生成的值更新 ParentId 列,并且更新规则将导致该新值级联到子数据表中的任何相关 DataRow,因此您可以继续插入它们而不必担心。

相关内容

  • 没有找到相关文章

最新更新