【问题标题】:How to get the auto increment primary key in old mdb database?如何获取旧 mdb 数据库中的自增主键?
【发布时间】:2012-03-02 11:18:03
【问题描述】:

在 mdb 访问数据库中插入新行后,我必须检索 Auto_Increment 主键 (id)。 在旧的 Access 97 版本中也有 mdb 文件,我不能使用“SELECT @@Identity;”,因为它不受支持。

此外,在多用户环境中,我不喜欢使用 Max(ID) 的想法。

其实我唯一的解决办法就是使用DAO作为:

Dim db As Database          'Test Database
Dim rs As Recordset         'Test Table
...
rs.AddNew
id = rs!id

但我必须添加对 DAO COM DLL 的引用,而我想要一个完整的托管 .NET 代码。

您有什么建议如何在不使用 DAO 或 Max(ID) 的情况下检索 Auto_Increment 主键(插入新行后)?

这是我添加新行的代码:

    Using oConn As New OleDbConnection(m_ConnString)
        oConn.Open()
        Using cmd As New OleDbCommand(sqlInsert, oConn)
            cmd.ExecuteNonQuery()
        End Using
    End Using

谢谢。

【问题讨论】:

  • 如果您在事务中执行插入和选择,您可以使用 Max。我知道这有点废话,但它是 Access97...
  • 抱歉,我认为您需要使用 DAO 引用,除非您可以将 MDB 更新为更高的 Access 格式。 Tony 的评论是正确的 - 我不确定我是否真的信任 Access 交易,但你可以试一试。
  • @Tony:交易还可以,但 Max 会产生我希望避免的开销。
  • 可能是一种有根据的恐惧。从 Access 97 到 2000 的过渡非常艰难。普遍认为 97 是有史以来最好的版本。从那里开始一切都在走下坡路。
  • 他们重写了很多数据库/VB 集成,以适应从访问 VB 到 Office 范围的 VB 的转换,但从那以后它就再也没有那么好用了。不过,他们可能已经解决了 2003 格式的一些过渡问题。在升级实时文件之前,我肯定会升级一次性副本并进行广泛测试,但这可能是值得的。现在97已经老了。老实说,拥有 DAO 是一个问题还是纯粹的东西?

标签: database visual-studio ms-access ado.net dao


【解决方案1】:

如果此表中有任何其他必填字段具有唯一索引,您可以在插入后使用DFirst("ID", "tablename", "myfield = givenvalue") 之类的内容查询其值。如果您在事务中运行,请使用记录集(可能与插入相同)而不是 DFirst。

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 2016-10-09
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多