Синтаксическая ошибка в операторе вставки

Я новичок в подключении к базе данных, и когда у меня возникла проблема со строкой cmdInsert.ExecuteNonQuery(), он говорит, что есть синтаксическая ошибка с оператором INSERT INTO, и я не могу понять, в чем проблема:

Imports System.Data
Imports System.Data.OleDb
Public Class txtNotes
    Dim cnnOLEDB As New OleDbConnection
    Dim cmdInsert As New OleDbCommand

    Dim strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & System.Environment.CurrentDirectory & "\CourseworkDB"
    'the name of the database goes in here'

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        cnnOLEDB.ConnectionString = strConnectionString
        cnnOLEDB.Open()

    End Sub

    Private Sub AddFirstName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddFirstName.Click
        If txtFirstName.Text <> "" Then

            MsgBox(cmdInsert.CommandText)
            cmdInsert.CommandText = "INSERT INTO Customer (First Name) VALUES (" & txtFirstName.Text & ", '"
            cmdInsert.CommandType = CommandType.Text
            cmdInsert.Connection = cnnOLEDB
            cmdInsert.ExecuteNonQuery()
        Else
            MsgBox("Enter the required values:" & vbNewLine & "1. First Name")
        End If
        cmdInsert.Dispose()
    End Sub
End Class

person Matthew Cracknell    schedule 26.02.2013    source источник


Ответы (3)


Я настоятельно рекомендую не вдаваться в рутину построения строк SQL путем объединения строк. Вы оставляете себя открытым для SQL-инъекций, особенно если это веб-интерфейс. Вы должны создавать свои команды с параметрами-заполнителями в строке, а затем добавлять параметры в объект команды. Добавьте параметры в той же последовательности, в которой они будут отображаться в команде... например,

cmdInsert.CommandText = "INSERT INTO Customer (FirstName, LastName) VALUES ( @parmFirstName, @parmLastName )"
cmdInsert.Parameters.AddWithValue( "@parmFirstName", txtFirstName.Text );
cmdInsert.Parameters.AddWithValue( "@parmLastName", txtLastName.Text );

Если в именах ваших полей есть встроенные пробелы, разные базы данных работают по-разному, для некоторых требуется одна обратная кавычка (клавиша слева от цифры 1) вокруг поля. например, «имя». Некоторые используют квадратные скобки, например [имя].

person DRapp    schedule 20.03.2013

Попробуй это

"INSERT INTO Customer (First Name) VALUES ('" & txtFirstName.Text & "')"

person Pezzzz    schedule 26.02.2013

Предупреждение: Бобби наблюдает за вами.

cmdInsert.CommandText = _
"INSERT INTO Customer (First Name) VALUES ('" & txtFirstName.Text & "')"
person spajce    schedule 26.02.2013