在主/明细表格中处理身份

时间:2015-08-08 03:27:51

标签: sql-server vb.net identity

我使用BindingSource获得了员工及其假期的主/详细信息表单。

enter image description here

这是我目前在“保存”按钮上的代码,只是为了说明它的组织方式:

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    _bsStaff.EndEdit()
    _bsHoliday.EndEdit()
    If _dsStaff.HasChanges Then
        _daStaff.Update(_dsStaff.Tables("Staff"))
        _daHoliday.Update(_dsStaff.Tables("Holidays"))
    End If
End Sub

如何处理员工的新身份价值?也就是说,当保存新的工作人员时,如何获取详细信息表单(假期)以获取新的StaffID值?根据{{​​3}},我可能会访问数据库,以便在DataTable的RowUpdated事件中检索@@ IDENTITY值(我的是使用SQL Server Express)。这很好,如果有必要这样做,但我(可能是假的)印象是这可以在DataSet中处理。也就是说,我以为我可以使用数据,最终在DataAdapter上调用Update,下次运行应用程序时会出现ID。

(我想另一个选择是,当添加一个新的staff-member时,重新填充整个DataSet(?))

另外,一个相关问题,我是否有必要在添加假期详细信息之前保存/更新新员工?

1 个答案:

答案 0 :(得分:0)

在insert命令中,您可以插入新的staff-member记录,并使用select scope_identity()获取为此记录创建的标识。这些sql语句应该在存储过程中一起包装。

然后在第二个插入中,您可以使用第一个插入中的值returen。

注意:@@identity将为您提供插入数据库中任何位置的最后一个标识值,这就是为什么在您的情况下最好使用scope_identity()来返回当前会话中插入的最后一个标识(即在存储过程中。)

要回答您的上一个问题 - 是的,您必须在插入详细信息数据之前插入主数据。