VB 获取 Autonum 值

VB Get Autonum values

我使用下面的第一个“Using”语句向名为“Archives”的 table 中插入一行。这个 table 有一个主键,它是 Access 数据库中的一个自动编号。第二个 Using 语句用于检索 autonum 字段的值,通过我刚刚输入的参数进行搜索。虽然这非常有效,但它看起来很丑陋。有没有办法让 autonum 字段在插入后返回给我? (顺便说一句 - 我已经从这两个语句之间删除了一些代码,所以如果它看起来有点奇怪,那可能就是原因。

    Using myConn As New OleDbConnection(strConnectionString),
        myInsertCommand As New OleDbCommand("INSERT INTO Archives (ArchUserName, ArchUserDomain, ArchDate, ArchRoot, ArchStatus) 
        VALUES (@strArchUser, @strArchUserDomain, @dteArchDate, @strArchRoot, @strArchStatus);", myConn)
            myInsertCommand.Parameters.Add("@strArchUser", OleDbType.VarChar, 100).Value = strArchUser
            myInsertCommand.Parameters.Add("@strArchDomain", OleDbType.VarChar, 100).Value = strArchDomain
            myInsertCommand.Parameters.Add("@dteArchDate", OleDbType.Date, 20).Value = dteArchDate
            myInsertCommand.Parameters.Add("@strArchRoot", OleDbType.VarChar, 255).Value = strArchRoot
            myInsertCommand.Parameters.Add("@strArchStatus", OleDbType.VarChar, 100).Value = strArchStatus
            myConn.Open()
            myInsertCommand.ExecuteNonQuery()
        End Using

       Dim sql As String = "SELECT ArchID
       FROM Archives
       WHERE ArchUserName = @ArchUserName
       AND ArchUserDomain = @ArchUserDomain
       AND ArchDate = @ArchDate
       AND ArchRoot = @ArchRoot"

        Using myConn As New OleDbConnection(strConnectionString),
              command As New OleDbCommand(sql, myConn)
            With command.Parameters
                .Add("@ArchUserName", OleDbType.VarChar, 50).Value = strArchUser
                .Add("@ArchUserDomain", OleDbType.VarChar, 50).Value = strArchDomain
                .Add("@ArchDate", OleDbType.Date).Value = dteArchDate
                .Add("@ArchRoot", OleDbType.VarChar, 50).Value = strArchRoot
            End With

            myConn.Open()
            strArchID = "Arch" & CStr(command.ExecuteScalar())
            strDirectoryName = "Archive" & CStr(command.ExecuteScalar())
            ReturnCode = 0
        End Using

插入后立即在同一个连接上使用@@Identity。

Private Function InsertArchiveRetrieveID(strArchUser As String, strArchDomain As String, dteArchDate As Date, strArchRoot As String, strArchStatus As String) As Integer
    Dim NewID As Integer
    Using myConn As New OleDbConnection(strConnectionString),
            myInsertCommand As New OleDbCommand("INSERT INTO Archives (ArchUserName, ArchUserDomain, ArchDate, ArchRoot, ArchStatus) 
                                                               VALUES (@strArchUser, @strArchUserDomain, @dteArchDate, @strArchRoot, @strArchStatus);", myConn)
        With myInsertCommand.Parameters
            .Add("@strArchUser", OleDbType.VarChar, 100).Value = strArchUser
            .Add("@strArchDomain", OleDbType.VarChar, 100).Value = strArchDomain
            .Add("@dteArchDate", OleDbType.Date, 20).Value = dteArchDate
            .Add("@strArchRoot", OleDbType.VarChar, 255).Value = strArchRoot
            .Add("@strArchStatus", OleDbType.VarChar, 100).Value = strArchStatus
        End With
        myConn.Open()
        myInsertCommand.ExecuteNonQuery()
        Using RetrieveNewIDCommand As New OleDbCommand("Select @@Identity From Archives,", myConn)
            NewID = CInt(RetrieveNewIDCommand.ExecuteScalar)
        End Using
    End Using
    Return NewID
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim NewID = InsertArchiveRetrieveID(txtUser.Text, txtDomain.Text, DateTimePicker1.Value, txtRoot.Text, txtStatus.Text)
    Dim strArchID = "Arch" & CStr(NewID)
    Dim strDirectoryName = "Archive" & CStr(NewID)
End Sub