2016-07-13 6 views
1

私は行を追加するたびに:SET @last_id_owner = LAST_INSERT_ID();.それは私に警告を与える; MysqlExceptionは、行で処理されませんでした:cmd.ExecuteNonQuery(); 私はそれがうまく動作する行を消去する場合。MysqlExceptionは処理されませんでしたC#LAST_INSERT_ID()

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を取得し、別のテーブルの挿入に使用する必要があります。 何が間違っていますか?

答えて

1

最初に気が付かれていることは、クエリがSqLInjectionの広いドアを開くことです。これを有効にするには、パラメータ化されたクエリを使用する必要があります。その後、MySqlCommandクラスの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; 
0

あなたが望むようには...あなたを助けるこのコードを試してみてください。

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(); 
関連する問題