2016-07-13 1 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();