首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得LAST_INSERT_ID();

如何获得LAST_INSERT_ID();
EN

Stack Overflow用户
提问于 2018-12-05 19:51:17
回答 3查看 891关注 0票数 0

我环顾四周,仍然对如何获得最后插入的ID感到困惑。我在执行的mysql语句的末尾添加了状态SELECT LAST_INSERT_ID();。我将这个值存储在prID = Convert.ToInt32(cmd.ExecuteScalar());中,这个命令正在我的数据库中创建两个实例。我很确定我需要分离这两个语句,但不确定如何在获得最后一个ID的同时。

代码语言:javascript
复制
          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();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-05 20:02:27

您只需要调用cmd.ExecuteNonQuery()来执行insert语句。返回时,cmd对象将为您填充其.LastInsertedId属性。

如下所示:

代码语言:javascript
复制
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();
票数 5
EN

Stack Overflow用户

发布于 2018-12-05 19:57:46

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

票数 3
EN

Stack Overflow用户

发布于 2018-12-05 20:01:13

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

您甚至可以使用cmd.CommandText = "SELECT last_insert_id()";重用相同的命令。

正如其他人指出的那样,...but和一个快速的web搜索为我澄清了,看起来您正在使用的MySQL .Net连接器已经提供了无需第二次查询的功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53639746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档