2017-06-04 15 views
1

私はMySQLの初心者ですが、レコードを挿入する前にデータベースにユーザーが存在するかどうかを確認しようとしていますが、SQL構文でこのエラー1064が発生します。 MySQLの声明ASP.Netで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(); 

アドバイスやあなたはユーザーexistanceをチェックするための1つのSQLクエリを作成する必要がありますあなたの

+0

[データベースへの重複エントリの防止]の可能な複製(https://stackoverflow.com/questions/40478342/prevent-duplicate-entries-to-database) – e4c5

答えて

0

に感謝し、新しいユーザーを挿入するための別の1してください。

チェック:

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側でそれを行う必要がありますし、DBのストアドプロシージャが必要になります。

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 ; 

私は構文をチェックしなかったため、修正する必要があります。

+0

ありがとう –

関連する問題