2012-03-20 130 views
-3

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

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() 
+1

是的,这是真的旧学校的代码,并受到SQL注入攻击 – 2012-03-20 14:37:04

+1

需要看到错误信息。 – javram 2012-03-20 14:37:48

+1

说真的 - 你应该**总是**使用参数化查询 - 现在每个人都应该知道,我会想! [看看这个伟大的漫画](http://xkcd.com/327/)和[阅读更多关于参数化查询](http://www.codinghorror.com/blog/2005/04/give-me-parameterized -sql-or-give-me-death.html) – 2012-03-20 14:40:29

回答

0

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

但是,它可能是由于您的一个或多个字段可能具有嵌入的单引号,因此在插入命令中取消(创建不平衡的引号)...或分号它表示一个语句的结束并开始下一个语句。

EDIT ..

然后是插入柱mutradifat

和值字段的

mymuradifat之间它可能是一个类型 - 邻

一个具有 “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 =替换(YourVariable,“'”,‘‘’’的)

实例,因为参数化不会在命令本身存在不匹配引号的问题。

+0

感谢您的信息,但我使用此代码仅供我自己使用,其次没有单引号或任何分号。我用“”替换单引号“” – user934820 2012-03-20 14:34:32

+0

@ user934820,参见修订版???列/值名称的可能类型-o – DRapp 2012-03-20 14:37:30

+0

拼写无关紧要,因为这是数据库中的确切列名称 – user934820 2012-03-20 14:48:04

0

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

+0

”INSERT INTO语句中的语法错误。“ Iam得到这个错误 – user934820 2012-03-20 14:40:28

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

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

0

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

您可能会发现上面提出的一个额外的'正在被添加或错字。重新检查你所有的列名,仔细检查你要执行的SQL。还要检查你是否没有任何字符 - 哪些sql可以认为是一个评论。并且该SQL可以存储要传入的字符。

除此之外,我强烈建议使用存储过程和参数,即使这仅用于您自己的个人使用,也不会伤害使用良好的实践和它的a建立良好的习惯。

相关问题