INSERT INTO语句vb2008中的语法错误

时间:2012-03-20 14:24:06

标签: sql database

我在数据库中插入新记录时遇到错误。请帮忙 错误是“INSERT INTO语句中的语法错误”。 好吧,我添加完整的语法。

Dim dbCommand As OleDbCommand
        Dim DBConn As OleDbConnection
        Dim DBInsert As New OleDbCommand()
        myword = "عابد"
        mypronounce = "عابِد [عا + بِد]"
        mylanguage = "(عربی)"
        mysiga = "(  مذکر - واحد  )"
        mymuradifat = "زاہِد, پُجاری, مُتَّقی, پارْسا, نیک, صالِح, تَپَسّی, ذاکِر, سَنْت, صُوفی, خُدا پَرَسْت"
        myenglish = "An adorer, worshipper, votary, devotee "
        mymurakbat = "لَکھْنَوی دَبِسْتان,  لَکھْنَوی سِکُول"
        myword = Replace(myword, "'", "''")
        mypronounce = Replace(mypronounce, "'", "''")
        mylanguage = Replace(mylanguage, "'", "''")
        mysiga = Replace(mysiga, "'", "''")
        mymuradifat = Replace(mymuradifat, "'", "''")
        myenglish = Replace(myenglish, "'", "''")
        mymurakbat = Replace(mymurakbat, "'", "''")
        '  & "(word,pronounce,language,siga,mutradifat,english,murakabat) " _
        DBConn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mypath & ";Jet OLEDB:Database Password=xxxxxxxx;")
        DBInsert.CommandText = "Insert Into data " _
             & "(word,pronounce,language,siga,mufradat,english,murakabat) " _
             & "Values (" _
             & "'" & myword & "', " _
             & "'" & mypronounce & "', " _
             & "'" & mylanguage & "', " _
             & "'" & mysiga & "', " _
             & "'" & mymuradifat & "', " _
             & "'" & myenglish & "', " _
             & "'" & mymurakbat & "')"
        DBInsert.Connection = DBConn
        DBInsert.Connection.Open()
        DBInsert.ExecuteNonQuery()
        DBConn.Close()

4 个答案:

答案 0 :(得分:0)

首先,看起来你会对SQL注入开放,并且应该使用参数化查询。这本身可能会为你解决它。

然而,就目前而言,它可能是由于你拥有的一个或多个字段可能有一个嵌入的单引号,因此在insert命令中取消(创建一个不平衡的引号)...或者一个分号,表示一个语句的结束并从下一个语句开始。

EDIT ..

然后它可能是插入列

之间的类型o

mutradifat <​​/ P>

的VALUE字段

mymuradifat <​​/ p>

一个人有“muTr”......另一个人“mur”......

我肯定会将其更改为参数化查询,例如

 DBInsert.CommandText = "Insert Into data " _
             & "(word, pronounce, language, siga, mufradat, english, murakabat) " _
             & "Values ( ?, ?, ?, ?, ?, ?, ? )";

DBInsert.Parameters.AddWithValue( "myWord", myword );
DBInsert.Parameters.AddWithValue( "myPronounce", mypronounce );
DBInsert.Parameters.AddWithValue( "myLanguage", mylanguage );
DBInsert.Parameters.AddWithValue( "mySiga", mysiga );
DBInsert.Parameters.AddWithValue( "myUradifat", mymuradifat );
DBInsert.Parameters.AddWithValue( "myEnglish", myenglish );
DBInsert.Parameters.AddWithValue( "myMurakbat", mymurakbat );

此外,在插入样本后,您可以摆脱

YourVariable = Replace(YourVariable,“'”,“''”)

实例,因为参数化不会在命令本身中出现错误匹配引号的问题。

答案 1 :(得分:0)

如果不知道收到的错误,就无法确定问题所在。乍一看,声明看起来是正确的。我所看到的是mymuradifat和mymurakbat的变量与mutradifat和murakabat的拼写不匹配,如果这就是你命名的那个就没有问题。你确定名字是否正确。错误是什么?

答案 2 :(得分:0)

DBInsert.CommandText = "Insert Into data " _
             & "(word,pronounce,language,siga,mufradat,english,murakabat) " _

我不认为那两个下划线“_”应该在那里。

答案 3 :(得分:0)

像这样诊断SQL可能很棘手。最好的方法是断点创建insert命令的行,然后获取创建的SQL并将其粘贴到管理工作室(或任何可以正确查看文本的地方)。

您可能会发现正在添加额外的'或如上所述的拼写错误。重新检查所有列名并仔细检查要执行的SQL。还要检查你没有任何字符 - 哪个sql可以考虑作为评论。并且该SQL可以存储您传入的字符。

除此之外,我强烈建议使用存储过程和参数,即使这只是为了您自己的个人用途,使用良好实践并且构建它的好习惯也不会有害。