Ошибка при вставке MySQL с ASP.Net

Я новичок в MySQL, я пытаюсь проверить, существует ли пользователь в базе данных, прежде чем вставлять запись, но я получаю эту ошибку 1064, ошибка в вашем синтаксисе SQL. Оператор MySQL

IF (SELECT count(*) FROM tvstream.t_users WHERE fb_id=`123456`)=0 THEN 
Begin 
  INSERT INTO `tvstream`.`t_users` (`fb_id` ,`user_name` ,`email` ,`gender`) 
  Values (`123456`,`Daina`,`[email protected]`,`Female`) 
End

Код ASP

        StringBuilder SQL_Add = new StringBuilder("IF (SELECT count(*) FROM tvstream.t_users WHERE fb_id=`" + fb_id +"`)=0 THEN ");
        SQL_Add.Append("Begin ");
        SQL_Add.Append("INSERT INTO  `tvstream`.`t_users` (`fb_id` ,`user_name` ,`email` ,`gender`)");
        SQL_Add.Append(" Values (`" + fb_id + "`,`" + user_name + "`,`" + email + "`,`" + gender + "`)");
        SQL_Add.Append(" End");

        Response.Write(SQL_Add.ToString());
        MySqlConnection m_cnn = new MySqlConnection(myConnection);

        m_cnn.Open();
        MySqlCommand cmd = new MySqlCommand(SQL_Add.ToString());
        cmd.Connection = m_cnn;
        cmd.ExecuteNonQuery();

Прошу совета и спасибо


person Daina Hodges    schedule 04.06.2017    source источник
comment
Возможный дубликат предотвратить дублирование записей в базе данных   -  person e4c5    schedule 04.06.2017


Ответы (1)


Вы должны сделать один sql-запрос для проверки существования пользователя и еще один для вставки нового пользователя.

Проверка:

SELECT count(*) FROM tvstream.t_users WHERE fb_id=`123456`

Вставка:

  INSERT INTO `tvstream`.`t_users` (`fb_id` ,`user_name` ,`email` ,`gender`) 
  Values (`123456`,`Daina`,`[email protected]`,`Female`) 

В основном вы должны запустить первый запрос, проверить результат и выполнить вставку.

Если вам действительно нужно сделать это полностью на стороне SQL, тогда вам понадобится хранимая процедура в вашей БД.

DELIMITER //

CREATE FUNCTION InsertUnique(fb_id VARCHAR(20), user_name VARCHAR(30), email VARCHAR(40), gender VARCHAR(10))
  RETURNS INT

  BEGIN
    DECLARE s INT;

    IF (SELECT count(*) FROM tvstream.t_users WHERE fb_id=`123456`)=0 THEN SET s = 1;
    ELSE SET s = 0;
    END IF;

    IF s = 0 THEN 
        INSERT INTO `tvstream`.`t_users` (`fb_id` ,`user_name` ,`email` ,`gender`) 
  Values (fb_id,user_name,email,gender) 
    END IF;

    RETURN s;
  END //

DELIMITER ;

Я не проверял синтаксис, возможно, его нужно исправить.

person Ilario Pierbattista    schedule 04.06.2017