如何获得LAST_INSERT_ID();

时间:2018-12-05 19:51:18

标签: c# mysql

我环顾四周,但对于如何获取最后插入的ID仍然感到困惑。我在正在执行的mysql语句的末尾添加了语句SELECT LAST_INSERT_ID();。我将值存储在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();

3 个答案:

答案 0 :(得分:4)

您只需要调用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();

答案 1 :(得分:3)

执行查询后,使用MySqlCommand.LastInsertedId属性。

答案 2 :(得分:1)

通常,在执行INSERT之后,立即在同一连接上单独执行SELECT last_insert_id()。 last_insert_id()的结果是特定于连接的,因此您不必担心其他客户端“覆盖”您的客户端。

您甚至可以只使用cmd.CommandText = "SELECT last_insert_id()";

重用同一命令

...但是正如其他人指出的那样,快速的网络搜索为我澄清了,您正在使用的MySQL .Net连接器似乎已经提供了该功能,而无需第二次查询。