ホームページ >データベース >mysql チュートリアル >C# で挿入された行の ID を取得するときに ExecuteScalar() が 0 を返すのはなぜですか?

C# で挿入された行の ID を取得するときに ExecuteScalar() が 0 を返すのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-08 09:48:02401ブラウズ

Why Does ExecuteScalar() Return 0 When Retrieving the ID of an Inserted Row in C#?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。