从 MS Access 数据库中检索最后插入的 ID

Posted

技术标签:

【中文标题】从 MS Access 数据库中检索最后插入的 ID【英文标题】:Retrieving last inserted ID from MS Access database 【发布时间】:2012-02-23 17:20:43 【问题描述】:

我有以下一组子程序的代码。它使用包含表单中提供的数据将一行插入到 MSAccess 数据库中。我想做的是获取此添加记录的 ID 号,以便可以为成功添加时调用的窗口的属性设置它。我尝试查找此内容,但我得到了一些关于 @@IDENTITY 的信息,但它使用了完全不同的连接方式。

Private Sub CreateTournament_Click(sender As System.Object, e As System.EventArgs) Handles CreateTournament.Click
    ' TODO: Check the form for errors, or blank values.
    ' Create the tournament in the database, add the values where needed. Close the form when done.

    Dim cn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim dr As OleDbDataReader
    Dim icount As Integer
    Dim str As String

    Try
        cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Master.mdb'")
        cn.Open()
        str = "insert into Tournaments (SanctioningID,TournamentName,TournamentVenue,TournamentDateTime,TournamentFirstTable,Game,Format,OrganizerID) values(" _
            & CInt(SanctioningIDTxt.Text) & ",'" & Trim(TournamentNameTxt.Text) & "','" & _
            "1" & "','" & EventDateTimePck.Value & "','" & TableFirstNumberNo.Value & "','" & GameList.SelectedIndex & "','" & FormatList.SelectedIndex & "','" & Convert.ToInt32(ToIDTxt.Text) & "')"

        'string stores the command and CInt is used to convert number to string
        cmd = New OleDbCommand(Str, cn)
        icount = cmd.ExecuteNonQuery
        MessageBox.Show(icount)
        'displays number of records inserted
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try

    Me.Close()

    Dim n As New TournamentWindow ' Open a new Tournament window if everything is successful
    n.TournID = Counter '<< This should be set to the ID of the most recently inserted row
    n.Show(HomeForm)'Invoke the form and assign "HomeForm" as it's parent.

End Sub

【问题讨论】:

【参考方案1】:

假设您在 Tournaments 表中有一个自动递增列,您可以执行“SELECT @@IDENTITY”来获取最后插入记录的 id。

顺便说一句,SanctioningIDTxt.Text 是唯一的吗?如果是这样,你不能用那个吗?

【讨论】:

不是。如果有人没有制裁号码,则默认为 -1。所以可以有多个 -1 值。关于@@IDENTITY 的问题,不是说它会发生,但如果其他人也添加一条记录,它会给出最后一条还是我插入的一条? 它会给你最后一个。 我想我必须确保数据库被锁定并且只被程序的一个实例使用。谢谢。 在 Access 中,返回的 ID 是连接实例的最后一个。我没有用 c# 测试过,但我想它是一样的。测试、暂停代码、手动编辑访问权限然后继续代码很容易。见***.com/questions/595132/… 不需要锁定数据库。正如所指出的,它基于连接,所以如果有 1 或 10 个用户,你总是得到你的最后一个 ID,而不是其他人的 ID。

以上是关于从 MS Access 数据库中检索最后插入的 ID的主要内容,如果未能解决你的问题,请参考以下文章

最后插入行的自动编号值 - MS Access / VBA

经典 ASP 和 ms-access:插入数据的问题

从 VB6 向 MS Access 插入订单

如何使用 ODBC 驱动程序仅从 MS Access 向 MySql 自动插入新记录?

ASP.NET - VB.NET - 从 MS-Access 数据库中检索记录

所有从 php 中的 ms access 数据库中检索数据