在AccessDB中检索@@ IDENTITY

时间:2012-02-26 16:36:40

标签: vb.net ms-access

我尝试在向其添加行后从访问数据库中检索@@ IDENTITY值。但是,我没有使用硬编码连接,而是使用DataSet向导。不幸的是,由于Jet引擎,我一次不能执行多个命令。我试图在一个单独的命令中选择@@ IDENTITY但不幸的是,我猜它只是一个不同的命令,因为它每次都返回0。

我的问题是,有没有办法可以使用GUI / IDE来检索@@ IDENTITY,或者我是否有硬编码连接,命令,查询值并获得那样的值。

感谢。

1 个答案:

答案 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

希望这可以帮助你或者至少有人会让我直截了当:)