【问题标题】:Getting last autonumber in access获取访问中的最后一个自动编号
【发布时间】:2014-01-21 21:13:43
【问题描述】:

在将记录插入访问数据库后,我试图获取最后一个自动编号。我变为零了。不知道我做错了什么。我试图谷歌但找不到任何我可以用来理解的简单示例。

// Database was opened before.
cmd.ExecuteNonQuery(); // Insert is working fine.
cmd = new OleDbCommand("SELECT @@IDENTITY", con);
id = cmd.ExecuteNonQuery(); // id shows zero in debug

【问题讨论】:

标签: c#


【解决方案1】:

ExecuteNonQuery 用于执行目录类型操作(创建/删除对象等)和update/insert/delete 操作(注意select 不在该列表中)。

对于update/insert/delete,它返回受影响的行数。

如果您想选择数据库中的某些内容,您需要获取一个结果集以查看它返回的内容(例如,请参阅ExecuteReader)。

另外,ExecuteScalar 可以执行命令并返回第一行的第一列,这似乎是您在此处所追求的。

【讨论】:

  • +1 ExecuteScalar 是 MSDN 推荐的获取值的方式。
  • 感谢您的帮助。对于像我这样的人,语法是 id = Convert.ToInt32(cmd.ExecuteScalar());
【解决方案2】:

如果 DAO 使用

RS.Move 0, RS.LastModified
lngID = RS!AutoNumberFieldName

如果 ADO 使用

cn.Execute "INSERT INTO TheTable.....", , adCmdText + adExecuteNoRecords
Set rs = cn.Execute("SELECT @@Identity", , adCmdText)
Debug.Print rs.Fields(0).Value

cn 是一个有效的 ADO 连接,@@Identity 将返回在此连接上插入的最后一个身份(自动编号)。

【讨论】:

    【解决方案3】:

    this:

    cn.Execute "INSERT INTO TheTable.....", , cmd+ adExecuteNoRecords
    Set rs = cn.Execute("SELECT @@Identity", , cmd)
    

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 2012-07-05
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      相关资源
      最近更新 更多