我尝试在向其添加行后从访问数据库中检索@@ IDENTITY值。但是,我没有使用硬编码连接,而是使用DataSet向导。不幸的是,由于Jet引擎,我一次不能执行多个命令。我试图在一个单独的命令中选择@@ IDENTITY但不幸的是,我猜它只是一个不同的命令,因为它每次都返回0。
我的问题是,有没有办法可以使用GUI / IDE来检索@@ IDENTITY,或者我是否有硬编码连接,命令,查询值并获得那样的值。
感谢。
答案 0 :(得分:1)
你问了一些我不知道答案的有趣问题。经过一些研究,我发现了这一点,看起来很有希望但是我从未使用它,也无法证实它是否以及如何运作。
我也不太了解DataSet wizard
,但模糊地回忆起它生成了一个OleDbAdapter
对象,希望它暴露了一个RowUpdated
事件,您可以将此代码挂钩到该事件。
我在这里粘贴了有趣的MSDN代码部分: (Link to full documentation)
' Create the INSERT command for the new category.
adapter.InsertCommand = New OleDbCommand( _
"INSERT INTO Categories (CategoryName) Values(?)", connection)
adapter.InsertCommand.CommandType = CommandType.Text
然后将连接和事件监听器连接到RowUpdated
' Include an event to fill in the Autonumber value.
AddHandler adapter.RowUpdated, _
New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)
使用相同的连接获取@@Identity
。
Private Shared Sub OnRowUpdated( _
ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs)
' Conditionally execute this code block on inserts only.
If e.StatementType = StatementType.Insert Then
' Retrieve the Autonumber and store it in the CategoryID column.
Dim cmdNewID As New OleDbCommand("SELECT @@IDENTITY", _
connection)
e.Row("CategoryID") = CInt(cmdNewID.ExecuteScalar)
e.Status = UpdateStatus.SkipCurrentRow
End If
End Sub
希望这可以帮助你或者至少有人会让我直截了当:)