我在将记录插入访问数据库后尝试获取最后一个自动编号。我变零了。不确定我做错了什么。我试图谷歌,但找不到任何我可以用来理解的简单例子。
// Database was opened before.
cmd.ExecuteNonQuery(); // Insert is working fine.
cmd = new OleDbCommand("SELECT @@IDENTITY", con);
id = cmd.ExecuteNonQuery(); // id shows zero in debug
答案 0 :(得分:2)
ExecuteNonQuery
用于执行目录类型操作(创建/删除对象等)和update/insert/delete
操作(请注意select
不在该列表中)。
对于update/insert/delete
,它会返回受影响的行数。
如果您想从数据库中选择某些内容,则需要获取结果集以查看其返回的内容(例如,请参阅ExecuteReader
)。
另外,ExecuteScalar
可以执行命令并返回第一行的第一列,这似乎就是你在这里所做的。
答案 1 :(得分:0)
请参阅this:
cn.Execute "INSERT INTO TheTable.....", , cmd+ adExecuteNoRecords
Set rs = cn.Execute("SELECT @@Identity", , cmd)
答案 2 :(得分:0)
如果使用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将返回此连接上插入的最后一个身份(自动编号)。