MysqlException 未处理 C# LAST_INSERT_ID()

MysqlException was unhandled C# LAST_INSERT_ID()

每当我添加行时:SET @last_id_owner = LAST_INSERT_ID();。它给了我警告; MysqlException 在行中未处理:cmd.ExecuteNonQuery(); 如果我擦掉这条线,效果很好。

String sql = "INSERT INTO owner (name,email,reward)"
             + " VALUES('" + owner.Name + "','" + owner.EMail + "'," + owner.Reward + ");SET @last_id_owner = LAST_INSERT_ID();";
connect();
MySqlCommand cmd = new MySqlCommand(sql, conexion);
cmd.ExecuteNonQuery();
disconnect();

我需要获取最后一个插入 ID 并将其用于另一个 table 的插入。 怎么了?

您首先要注意的是,您的查询将为 SqLInjection 打开一扇宽阔的大门。为避免这种情况,您应该使用参数化查询。然后您可以使用 MySqlCommand class 的 LastInsertedId 来获取最后插入的 ID。您可以使用以下代码段实现这两个目标:

// Parameterization implementation
String sql = "INSERT INTO owner (name,email,reward)"
    + " VALUES(@ownerName,@ownerMail,@ownerReward)";

MySqlCommand cmd = new MySqlCommand(sql, conexion);
cmd.Parameters.Add("@ownerName",MySqlDbType.VarChar).Value= owner.Name;
cmd.Parameters.Add("@ownerMail", MySqlDbType.VarChar).Value = owner.EMail;
cmd.Parameters.Add("@ownerReward", MySqlDbType.VarChar).Value = owner.Reward;

// Executing Query and getting last Inserted ID
cmd.ExecuteNonQuery();
long lastInsertedID = cmd.LastInsertedId;

尝试使用此代码它将帮助您...如您所愿。

 String sql = "INSERT INTO owner (name,email,reward)  VALUES('" + owner.Name + "','" + owner.EMail + "'," + owner.Reward + "); select LAST_INSERT_ID();";
            connect();
            MySqlCommand cmd = new MySqlCommand(sql, conexion);
            cmd.ExecuteScalar();
            disconnect();