我环顾四周,仍然对如何获得最后插入的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();发布于 2018-12-05 20:02:27
您只需要调用cmd.ExecuteNonQuery()来执行insert语句。返回时,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();发布于 2018-12-05 19:57:46
执行查询后使用MySqlCommand.LastInsertedId属性。
发布于 2018-12-05 20:01:13
通常,SELECT last_insert_id()将在同一连接上立即执行INSERT之后单独执行。last_insert_id()的结果是特定于连接的,因此您不需要担心其他客户端“覆盖”您的客户端。
您甚至可以使用cmd.CommandText = "SELECT last_insert_id()";重用相同的命令。
正如其他人指出的那样,...but和一个快速的web搜索为我澄清了,看起来您正在使用的MySQL .Net连接器已经提供了无需第二次查询的功能。
https://stackoverflow.com/questions/53639746
复制相似问题