私はAccessデータベースでVB.NETを使用していますが、値を挿入しますが、最後に挿入されたID(自動番号)を取得して関連テーブルに挿入する必要があります。vb.net sqlが最後に挿入したID
@@ IDENTITYとMAX(列)を試しましたが、@@ IDENTITYはゼロを返し、MAXはあまり信頼できません(時にはデータを挿入するのが遅いので、挿入されたIDの前に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()
これは、2つの機能で行われますが、thatsのは、ちょうど2つの機能から取られました。 2つのステートメントが実行されますが、例として実行されたステートメントが表示されています。
@@ IDENTITYでどうやって問題が起こっているかわからないので、@ IDENTITYとMAXの代替方法がありますか?
アドバイスありがとうございました:)。
アクセスは1つのコマンドで複数のステートメントをサポートしていないについては、私の最後の編集を参照してください。それが実際に働いていることを確認できますか、別のアプローチのために行ったことがありますか? –