C# で挿入された行の ID を取得する
データベース テーブルに新しいデータを挿入するときに、新しく生成された行の ID を取得する後続の処理に不可欠な場合があります。この記事では、挿入された行 ID を取得するために ExecuteScalar() を使用すると、実際の ID がゼロ以外であるにもかかわらず常に 0 を返すという一般的な問題について説明します。
提供されるコード ブロック:
MySqlCommand comm = connect.CreateCommand(); comm.CommandText = insertInvoice; comm.CommandText += "\'" + invoiceDate.ToString("yyyy:MM:dd hh:mm:ss") + "\', " + bookFee + ", " + adminFee + ", " + totalFee + ", " + customerID + ")"; int id = Convert.ToInt32(comm.ExecuteScalar());
挿入ステートメントを実行し、ExecuteScalar() を使用して生成された ID を取得しようとします。ただし、このアプローチは通常、非スカラー コンテキストでは ExecuteScalar() メソッドの予測不能性により失敗します。
挿入された行の ID を確実に取得するには、次のコードを使用できます:
MySqlCommand comm = connect.CreateCommand(); comm.CommandText = insertStatement; comm.ExecuteNonQuery(); long id = comm.LastInsertedId;
ExecuteNonQuery() で挿入ステートメントを実行した後、コマンド オブジェクトの LastInsertedId プロパティにアクセスできます。これにより、最近挿入された行に対して生成された ID が提供されます。この方法は、挿入された行 ID を確実に取得するために推奨されます。
さらに、挿入された ID を取得するための MySQL 構文 (last_insert_id()) は C# ではサポートされていません。代わりに、LastInsertedId を MySqlCommand オブジェクトの一部として使用して、生成された ID を取得できます。
以上がC# で挿入された行の ID を取得するときに ExecuteScalar() が 0 を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。