2012-03-20 125 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建立良好的習慣。

相關問題