首頁  >  文章  >  資料庫  >  為什麼在 C# 中檢索插入行的 ID 時 ExecuteScalar() 回傳 0?

為什麼在 C# 中檢索插入行的 ID 時 ExecuteScalar() 回傳 0?

Linda Hamilton
Linda Hamilton原創
2024-11-08 09:48:02354瀏覽

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

在C# 中檢索插入行的ID

向資料庫表中插入新資料時,擷取新產生的行的ID對於後續處理至關重要。本文探討了一個常見問題,即使用 ExecuteScalar() 取得插入的行 ID 始終傳回 0,即使實際 ID 非零。

提供的程式碼區塊:

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。

此外,C# 不支援用於檢索插入的 ID 的 MySQL 語法 (last_insert_id())。相反,LastInsertedId 可以用作 MySqlCommand 物件的一部分來取得產生的 ID。

以上是為什麼在 C# 中檢索插入行的 ID 時 ExecuteScalar() 回傳 0?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn