Ell*_*ott 7 sql vb.net ms-access lastinsertid
我正在使用带有Access数据库的VB.NET,我插入值但我需要获取最后插入的ID(自动编号)并将其插入相关表中.
我已经尝试了@@ IDENTITY和MAX(列)但是@@ IDENTITY返回零并且MAX不是很可靠(有时插入数据很慢,所以在插入数据之前获取ID).
Dim insertSql = datalayer.getDataTable((String.Format("INSERT INTO users (username) VALUES ({0})", username)))
Dim newID = datalayer.getDataTable((String.Format("SELECT @@IDENTITY FROM users")))
Dim con As OleDbConnection = getConnection()
con.Open()
Dim sqlCommand As OleDbCommand = New OleDbCommand(String.Format(insertSql), con)
sqlCommand.ExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)
这是在两个函数中完成的,因此上面的代码可能看起来很混乱,但这只是从两个函数中获取的.这两个语句被执行,但我刚刚显示了一个被执行的例子.
是否有@@ IDENTITY和MAX的替代品,因为我似乎没有看到@@ IDENTITY出了什么问题?
谢谢你的任何建议:).
它绝对比SELECT @@ IDENTITY在与插入相同的连接(和事务)上执行是至关重要的.如果你的getDataTable()方法为每个调用创建一个新连接,那么这就是它无法正常工作的原因.
更新
另一种更好的方法是在一个中执行两个语句
sql = "INSERT INTO...;SELECT @@IDENTITY..."
Dim id = sqlCommand.ExecuteScalar(sql)
Run Code Online (Sandbox Code Playgroud)
再次更新
看起来你不能对MS Access数据库执行这样的多个函数,在一个操作中运行多个SQL语句.