2010-11-28 14 views
0

私はAccessデータベースとvb.net 2010を使用しています。データベース内にtitle、datein、dateout、roomnymberの列を持つテーブルを作成しました。 vb.net 2010では、私は識別タイトル=コンボボックス、dateinとdateout = DateTimePickerを作成しました。 F5をクリックすると、エラーが発生します。INSERT INTO構文内の構文エラー。データベースにアクセスするためにvb.netからデータを格納する方法

Dim sql As String 
    sql = "INSERT INTO tcekin(title,firstname,lastname,address,country,company,roomnumber,datein,dateout,rommtype,note)" & "VALUES('" & ComboBox1.Text & _ 
    "','" & txtFirstName.Text & "','" & txtLastName.Text & "','" & txtAddress.Text & "','" & cboCountry.Text & "','" & txtCompany.Text & "','" & txtNumber.Text & _ 
    "','" & dptDateIn.Text & "','" & dptDateOut.Text & "','" & cboRoom.Text & "','" & txtNotes.Text & "')" 
    cmmd = New OleDbCommand(sql, cnn) 
+0

英語のみをお願いします。私は一瞬でGoogleの翻訳を提供し、手でコンテンツを編集するかもしれませんが、質問を編集して自分の言葉で英語で尋ねるともっとうまくいくでしょう。 –

+0

owl...私の英語が壊れているから^^ – existsman

答えて

3

ここでの第一の問題は、そのようなクエリを構築するためNEVER NEVER 使用の文字列の連結になることはありません。ここに私のコードです。

Dim sql As String = _ 
    "INSERT INTO tcekin " &_ 
    "(title,firstname,lastname,address,country,company,roomnumber,datein,dateout,rommtype,note)" &_ 
    "VALUES(?,?,?,?,?,?,?,?,?,?,?)" 
cmmd = New OleDbCommand(sql, cnn) 
cmmd.Parameters.AddWithValue("Title", Combobox1.Text) 
cmmd.Parameters.AddWithValue("FirstName", txtFirstName.Text) 
''# ... 
''# ... 

このようにすると、不平を言っているような構文エラーを発見しやすくなります。

+0

だから、cmmd.Parameters.AddWithValue( "FirstName"、txtFirstName.Text) を1つずつ追加する必要がありますか?メモまでtxtFirstNameから? – existsman

+0

はい。必ずパラメータ化されたクエリを使用してください。あなたが使用していた文字列連結メソッドは、SQLインジェクションハックに対して脆弱であるクエリを引き起こします。 –

+0

+ 1Mボタンはどこですか? – Bobby

関連する問題