簡體   English   中英

如何獲得LAST_INSERT_ID();

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM