2012-03-20 22 views
-3

データベースに新しいレコードを挿入中にエラーが発生しました。いずれかの助けをお願いします エラーは "INSERT INTO文の構文エラーです。" ok私は完全な構文を追加します。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インジェクション攻撃の対象です –

+1

エラーメッセージを表示する必要があります。 – javram

+1

真剣に - 必ず**パラメータ化されたクエリを使用してください**誰もが今のところ私は思うはずです! [この偉大な漫画をチェックしてください](http://xkcd.com/327/)と[[パラメータ化されたクエリについてもっと読む](http://www.codinghorror.com/blog/2005/04/give-me-parameterized) -sql-or-give-me-death.html) –

答えて

0

はまず、それはあなたがSQLインジェクションに大きく開いだろうように見えますし、パラメータ化クエリを使用する必要があります。それはおそらくあなたのためにおそらくそれを解決するだろう。

しかし、それはおそらく、あなたが持っているフィールドの1つ以上が1つの引用符を埋め込んでいる可能性があります。したがって、挿入コマンドでアンバランス引用符を取り消します...またはセミコロン1つのステートメントの終わりを示し、次のステートメントを開始します。

EDIT ..

そしてインサートカラム

mutradifat

とVALUEフィールド

のmymuradifat間、それはおそらく型O

つであるが持っている "muTr" ...他の "mur" ...

私は確かにサンプル挿入した後、あなたはおそらく

YourVariable =置き換え(YourVariable、「'」、 『『』』を取り除くことができ、このように加えて

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); 

として、パラメータ化クエリにそれを切り替えます)

インスタンスであるため、パラメタリゼーションではコマンド自体に引用符が一致しないという問題はありません。

+0

情報に感謝しますが、このコードを自分のために使用しています。第二に、一重引用符もセミコロンもありません。私は一重引用符を "" – user934820

+0

@ user934820と置き換えます。改訂版を見ますか?可能なタイプのカラム/値の名前 – DRapp

+0

は、これはデータベース – user934820

0

受信したエラーを知らなくても問題が何であるかを知る方法はありません。一見すると、そのステートメントは正しいように見えます。私が見ているのは、mymuradifatとmymurakbatの変数がmutradifatとmurakabatのスペルに一致しないということです。名前が正しいと確信していますか?エラーは何ですか?

+0

"INSERT INTO文の構文エラーです。"私はこのエラーを取得している – user934820

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

私はこれらの2つの下線 "_"はそこにあるはずだと思います。

0

このようにSQLを診断するのは難しいことがあります。最良の方法は、insertコマンドを作成する行をブレークポイントにしてから、作成されたSQLを取得し、管理スタジオ(またはテキストを適切に表示できる場所)に貼り付けることです。

上記のように「追加されています」または「タイプミスがあります。すべての列名を再確認し、実行するSQLを注意深く調べます。また、sqlがコメントとして考えることができるような文字がないことを確認してください。そして、SQLに渡す文字を格納することができます。

ストアドプロシージャとパラメータを使用することを強くお勧めします。これは、個人的な使用のためだけであっても、構築する良い習慣。

関連する問題