如果不存在,则查询结果为“SQL语法错误”
我想在VisualBasic中插入一行SQL,并收到类似这样的消息:Error:You have errin in your SQL syntax near IF NOT EXISTS。。。在1号线 代码如下所示:如果不存在,则查询结果为“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
...
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行。我认为现在有一个'到很多。。。?