首页 >数据库 >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对于后续处理至关重要。本文探讨了一个常见问题,即使用 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