我环顾四周,但对于如何获取最后插入的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();
答案 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连接器似乎已经提供了该功能,而无需第二次查询。