如果不存在,则查询结果为“SQL语法错误”

如果不存在,则查询结果为“SQL语法错误”,sql,vb.net,Sql,Vb.net,我想在VisualBasic中插入一行SQL,并收到类似这样的消息:Error:You have errin in your SQL syntax near IF NOT EXISTS。。。在1号线 代码如下所示: ... Try query = "IF NOT EXISTS (Select Movie_Name from MovieDB where Movie_Name=" & placeholder & ") INSERT INTO MovieDB (Movie_N

我想在VisualBasic中插入一行SQL,并收到类似这样的消息:Error:You have errin in your SQL syntax near IF NOT EXISTS。。。在1号线

代码如下所示:

...
Try

    query = "IF NOT EXISTS (Select Movie_Name from MovieDB where Movie_Name=" & placeholder & ") INSERT INTO MovieDB (Movie_Name) VALUES ('" & placeholder & "')"

    'PREPARE CONNECTION
    MySQLCmd = New MySqlCommand(query, dbConnection)

    'OPEN DB 
    dbConnection.Open()

    'EXECUTE QUERY
    MySQLCmd.ExecuteNonQuery()

    'CLOSE DB
    dbConnection.Close()

Catch ex As Exception
    ...

我真的不明白了。一些想法?

您至少需要在第一个字符串周围加上单引号:

                                                                      --V                 --V
query = "IF NOT EXISTS (Select Movie_Name from MovieDB where Movie_Name='" & placeholder & "'); INSERT INTO MovieDB (Movie_Name) VALUES ('" & placeholder & "')"
正如@Cameron敏锐地注意到的,在EXISTS函数和INSERT命令之间还需要一个分号


但是您应该考虑使用参数而不是连接SQL—它不仅消除了对字符串进行分隔的需要,而且还防止了SQL注入,避免了字符串包含撇号时出现语法错误。

据我所知,如果不存在,则INSERT不是有效的MySQL语法。这应该起作用:

query = "INSERT INTO MovieDB (Movie_Name) VALUES ('" & placeholder & "') ON DUPLICATE KEY UPDATE Movie_Name = Movie_Name";

这将尝试插入新的电影名称,如果失败,则几乎什么也不做。若要实现此功能,必须在电影名称上有一个唯一的索引。

占位符从何处获取,它包含什么?这是Visual Basic.NET还是VBA?@DStanley没有Catch,因此这是VB。Netplaceholder是复选框中的值。当我从复选框列表中选中一些电影时,占位符中将是复选框moviename的名称,如ABC.mkv。根据上面的代码,我收到以下消息:错误:writeToDB您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解要使用的正确语法,例如“如果不存在,请从MovieDB中选择Movie_Name=”Movie_Name='敌手2.mkv,第1行。我认为现在有一个'到很多。。。?