Retrieving the ID of an Inserted Row in C#
When inserting new data into a database table, capturing the ID of the newly generated row can be essential for subsequent processing. This article explores a common issue where using ExecuteScalar() to obtain the inserted row ID consistently returns 0, even though the actual ID is non-zero.
The provided code block:
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());
attempts to execute an insert statement and retrieve the generated ID using ExecuteScalar(). However, this approach typically fails due to the ExecuteScalar() method's unpredictability in non-scalar contexts.
To reliably retrieve the ID of the inserted row, the following code can be used:
MySqlCommand comm = connect.CreateCommand(); comm.CommandText = insertStatement; comm.ExecuteNonQuery(); long id = comm.LastInsertedId;
After executing the insert statement with ExecuteNonQuery(), we can access the LastInsertedId property of the command object, which provides the generated ID for the recently inserted row. This method is recommended for reliably retrieving the inserted row ID.
Additionally, the MySQL syntax for retrieving the inserted ID (last_insert_id()) is not supported in C#. Instead, LastInsertedId can be used as a part of the MySqlCommand object to obtain the generated ID.
The above is the detailed content of Why Does ExecuteScalar() Return 0 When Retrieving the ID of an Inserted Row in C#?. For more information, please follow other related articles on the PHP Chinese website!