我使用BindingSource获得了员工及其假期的主/详细信息表单。
这是我目前在“保存”按钮上的代码,只是为了说明它的组织方式:
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(?))
另外,一个相关问题,我是否有必要在添加假期详细信息之前保存/更新新员工?
答案 0 :(得分:0)
在insert命令中,您可以插入新的staff-member记录,并使用select scope_identity()
获取为此记录创建的标识。这些sql语句应该在存储过程中一起包装。
然后在第二个插入中,您可以使用第一个插入中的值returen。
注意:@@identity
将为您提供插入数据库中任何位置的最后一个标识值,这就是为什么在您的情况下最好使用scope_identity()
来返回当前会话中插入的最后一个标识(即在存储过程中。)
要回答您的上一个问题 - 是的,您必须在插入详细信息数据之前插入主数据。