【问题标题】:Access - Get counter (autoincrement primary key) during Insert访问 - 在插入期间获取计数器(自动增量主键)
【发布时间】:2011-07-07 03:05:48
【问题描述】:

MS-Access 数据库

Table: myTable
Field1: ID (COUNTER, which is autoincrement in Access)
Field2: SURNAME (VARCHAR)
Field3: NAME (VARCHAR)

每当我插入一行时,我都想获取 ID。有办法吗? (我使用的是 VB.Net)

编辑: 使用 SELECT @@IDENTITY 的解决方案

'Execute insert statement and return identity (autoincrement ID field)
Public Function executeInsertGetIdentity(ByVal insertStatement As String) As Integer
    ' Execute insert
    Dim myOleDbCommand As OleDbCommand
    myOleDbCommand = New OleDbCommand(insertStatement, connection)
    If myOleDbCommand.ExecuteNonQuery() < 1 Then Return 0
    ' Return identity
    Dim myOleDbCommand2 As OleDbCommand
    myOleDbCommand2 = New OleDbCommand("SELECT @@IDENTITY", connection)
    Dim myOleDbDataReader As OleDbDataReader = myOleDbCommand.ExecuteReader()
    myOleDbDataReader.Read()
    executeInsertGetIdentity = myOleDbDataReader.Item(0).ToString()
    myOleDbDataReader.Close()
End Function

【问题讨论】:

    标签: vb.net ms-access primary-key auto-increment


    【解决方案1】:

    【讨论】:

    • 谢谢。使用您的答案发布了完整的解决方案
    • 我在想。是否有可能在 'INSERT' 和 'SELECT @@IDENTITY' 之间发生第二次插入来自另一个用户,这与我从 'SELECT @@IDENTITY' 获得的 ID 混淆了,因为数据库被许多用户使用?
    • @@IDENTITY 由每个连接维护,因此,不,在您的代码中这是不可能的。但是,有一个警告:A2010 增加了具有等效触发器(表级数据宏)的能力,如果您的第一个语句导致记录插入到另一个具有自动编号的表中,您可能会得到错误的答案(我不知道知道你是否这样做)。在 SQL Server 中,您有 Scope_Identity() 可以解决该问题,但据我所知,A2010 并未解决此潜在问题(可能是因为它不存在)。
    猜你喜欢
    • 2015-05-19
    • 2012-02-22
    • 2013-11-12
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    相关资源
    最近更新 更多