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