2014-01-31 4 views
0

, поэтому у меня есть эти коды, но он получает неправильную ошибку синтаксиса .. я не знаю, что не так, может кто-нибудь мне помочь? im a newbee в VB. программированиеКак t вставить данные в базу данных с помощью запроса

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 


    Try 
     Dim SqlQuery = "INSERT INTO sample (FirstName,MiddleName,LastName,Gender,age,Year Level,Date of birth,Date Enrolled,Citezenship,Religion,Address,Telephone NO,Average Grade,Father,Fathers Occupation,Fathers Address,Mother,Mothers Occupation,Mothers Address,Guardian,Guardians Address,Family Income,Payed Amount,Balance) VALUES ('" & txtfname.Text & "','" & txtmname.Text & "','" & txtlname.Text & "','" & combosex.Text & "','" & comboage.Text & "','" & comboyear.Text & "','" & txtdateofbirth.Text & "','" & txtdateenrolling.Text & "','" & txtcitezen.Text & "','" & txtreligion.Text & "','" & txtstudentadd.Text & "','" & txtnumber.Text & "','" & txtgrade.Text & "','" & txtfather.Text & "','" & txtfatherocc.Text & "','" & txtfatheradd.Text & "','" & txtmother.Text & "','" & txtmotherocc.Text & "','" & txtmotheradd.Text & "','" & txtguardian.Text & "','" & txtguardianadd.Text & "','" & txtincome.Text & "','" & txtpayment.Text & "','" & TextBox2.Text & "')" 
     Dim sqlcommand As New OleDbCommand 
     With sqlcommand 
      .CommandText = SqlQuery 
      .Connection = conn 
      .ExecuteNonQuery() 
     End With 
     MsgBox("one record succesfull added") 

    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
End Sub 
+0

Что такое исключение msg? – apomene

+0

System.data.oledb.oledbException: ошибка sysntax в инструкции INSERT INTO. на System.data.oledb.oledbcommand.executeCommandTextErrorHandling (oledbHresult ч) на system.data.oledb.oledbcommand.executeCommandTextForSingleResult (\t tagDparams dbParams, Object & executeResult) в System.data.Oledb.OledbCommand.ExecuteCommand (поведение командного поведения , объект и результат выполнения) на system.data.oledb.oledbcommand.executeraderInternal (поведение commandBehavior, строковый метод atsystem.oledb.oledbcommand.executenonquery() – user3242798

ответ

0

Не видя сообщение об исключении его трудно сказать, что именно не так .... но догадка я бы сказал, вы вставляете жала, где дб ожидает целых чисел или дат. Вам необходимо указать свои данные в том типе, который требуется для каждого поля.

Вы также открыты для внедрения в sql. Попробуйте параметризовать свои данные.

+0

System.data.oledb.oledbException: sysntax ошибку в вставить в заявлении в. System.data.oledb.oledbcommand.executeCommandTextErrorHandling (oledbHresult hr) at system.data.oledb.oledbcommand.executeCommandTextForSingleResult (\t tagDparams dbParams, объект и executeResult) в System.data.Oledb.OledbCommand.ExecuteCommand (поведение поведение команды, Object & исполняют результат) на system.data.oledb.oledbcommand.executeraderInternal (commandBehavior поведение, строковый метод atsystem.oledb.oledbcommand.executenonquery() – user3242798

1

Это скорее всего из-за уязвимости SQL-инъекции, которую вы подвергаете. Обратите внимание на то, как вы обработки пользовательского ввода:

"... VALUES ('" & txtfname.Text & "', ..." 

Это может выглядеть как вы просто положить значение данных в запросе, но то, что вы на самом деле делаете обработку пользовательского ввода как исполняемый код. Любой пользовательский ввод с зарезервированными символами базы данных вызовет проблемы. Например, если значение входного сигнала имеет апостроф (например, фраза "don't use SQL injectable code"), то результирующий запрос вы строите является:

"... VALUES ('don't use SQL injectable code', ..." 

Естественно, это приведет к синтаксической ошибке, потому что есть t после строки literal, который недействителен SQL.

Вместо обработки пользовательского ввода как исполняемый код, рассматривайте его как значения данных. Используйте SQL-параметры для добавления этих значений в ваш запрос. Что-то вроде этого:

' replace each concatenated string with a parameter placeholder: 
Dim SqlQuery = "... VALUES (@fname, ..." 

Dim sqlcommand As New OleDbCommand 
With sqlcommand 
    .CommandText = SqlQuery 
    .Connection = conn 

    ' add a parameter for each placeholder: 
    .Parameters.AddWithValue("@fname", txtfname.Text) 

    .ExecuteNonQuery() 
End With 
+0

sir .. он все еще не работает .. :(i paramitised все, кроме im, все еще получаю ошибку .. (извините за английский) – user3242798

+0

@ user3242798: Что такое * фактическое исключение * вы видите? Каков текст запроса, вызывающего ошибку? – David

+0

это ошибка System.data.oledb.oledbException: sysntax error в инструкции INSERT INTO. на System.data.oledb.oledbcommand.executeCommandTextErrorHandling (oledbHresult ч) на system.data.oledb.oledbcommand.executeCommandTextForSingleResult (\t tagDparams dbParams, Object & executeResult) в System.data.Oledb.OledbCommand.ExecuteCommand (поведение командного поведения , объект и выполнить результат) на system.data.oledb.oledbcommand.executeraderInternal (поведение commandBehavior, строковый метод atsystem.oledb.oledbcommand.executenonquery() – user3242798

Смежные вопросы