[英]How to get LAST_INSERT_ID();
我環顧四周,但仍然對如何獲取最后插入的ID感到困惑。 我添加了語句SELECT LAST_INSERT_ID();
在我正在執行的mysql語句的末尾。 我將值存儲在prID = Convert.ToInt32(cmd.ExecuteScalar());
該命令正在我的數據庫中創建兩個實例。 我很確定我需要將這兩個語句分開,但是不確定如何在仍獲得最后一個ID的同時。
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "INSERT INTO pull_requests (repoID, branchID, fileID, prStatus, prComments) VALUES (@rID, @bID, @fID, @prS, @prC); SELECT LAST_INSERT_ID();";
MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@rID", RI);
cmd.Parameters.AddWithValue("@bID", BI);
cmd.Parameters.AddWithValue("@fID", FI);
cmd.Parameters.AddWithValue("@prS", 0);
cmd.Parameters.AddWithValue("@prC", comment);
prID = Convert.ToInt32(cmd.ExecuteScalar());
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
您只需要調用cmd.ExecuteNonQuery()
即可執行插入語句。 返回時,將為您填充cmd
對象的.LastInsertedId
屬性。
像這樣:
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "INSERT INTO pull_requests (repoID, branchID, fileID, prStatus, prComments) VALUES (@rID, @bID, @fID, @prS, @prC);";
MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@rID", RI);
cmd.Parameters.AddWithValue("@bID", BI);
cmd.Parameters.AddWithValue("@fID", FI);
cmd.Parameters.AddWithValue("@prS", 0);
cmd.Parameters.AddWithValue("@prC", comment);
cmd.ExecuteNonQuery();
long lastId = cmd.LastInsertedId;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
執行查詢后,使用MySqlCommand.LastInsertedId
屬性。
通常,在執行INSERT之后,立即在同一連接上分別執行SELECT last_insert_id()。 last_insert_id()的結果是特定於連接的,因此您不必擔心其他客戶端“覆蓋”您的客戶端。
您甚至可以只使用cmd.CommandText = "SELECT last_insert_id()";
重用同一命令cmd.CommandText = "SELECT last_insert_id()";
...但是正如其他人指出的那樣,快速的網絡搜索為我澄清了,您正在使用的MySQL .Net連接器似乎已經提供了該功能,而無需第二次查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.