2017-06-04 92 views
1

我是MySQL的新手,我想在插入記錄前檢查用戶是否存在於數據庫中,但是我得到了這個錯誤1064,SQL語法錯誤。 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(); 

請指點,謝謝您

+0

可能重複的[防止重複的數據庫項](https://stackoverflow.com/questions/40478342/prevent-duplicate-entries-to-database) – e4c5

回答

0

你應該做一個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 ; 

我沒有檢查語法,它可能需要修復。

+0

謝謝你的幫助 –