Синтаксическая ошибка в инструкции INSERT INTO. VB. NET И MS-ACCESS - PullRequest
0 голосов
/ 19 апреля 2020

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

Private Sub AddBtn_Click(sender As Object, e As EventArgs) Handles AddBtn.Click
        If UsernameTxt.Text = Nothing Or PasswordTxt.Text = Nothing Or FullNameTxt.Text = Nothing Or EmailTxt.Text = Nothing Or AddressTxt.Text = Nothing Or ContactNumberTxt.Text = Nothing Or UserTypeTxt.Text = Nothing Then
            MsgBox("Please Input Credentials", MsgBoxStyle.OkOnly)
        Else
            Dim sql As String
            Dim cmd As New OleDbCommand
            Dim i As Integer
            Try
                con.Open()
                sql = "INSERT INTO userTable (userName,passWord,fullName,userType,e_mail,home_address,contact_number) values ('" & UsernameTxt.Text & "', '" & PasswordTxt.Text & "', '" & FullNameTxt.Text & "', '" & UserTypeTxt.Text & "', '" & EmailTxt.Text & "', '" & AddressTxt.Text & "', '" & ContactNumberTxt.Text & "');"
                cmd.Connection = con
                cmd.CommandText = sql

                i = cmd.ExecuteNonQuery
                If i > 0 Then
                    MsgBox("Record Added SuccessFully")
                Else
                    MsgBox("Error Adding Record")
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()
            End Try
        End If
    End Sub

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Все рекомендации по параметрам остаются в силе, но, даже если есть другие проблемы, одна из них, которая не была решена, это то, что «Пароль» является зарезервированным словом в Jet / ACE SQL. Это означает, что вам нужно экранировать имя этого столбца, независимо от того, что вы еще делаете:

sql = "INSERT INTO userTable (userName,[passWord],fullName,..."

Пароли не должны храниться в открытом виде в любом случае, поэтому, если вы все делаете правильно и хэшируете пароли, вы можете Назовите ваш столбец "PasswordHa sh", и это не проблема.

0 голосов
/ 19 апреля 2020

Поздравляем, вы обнаружили одну из причин, по которой важно использовать параметры в ваших SQL инструкциях команды - они позволяют вам написать оператор и заполнить произвольные значения данных, не беспокоясь о том, как синтаксис SQL Будет затронуто:

For Each textbox As TextBox In {UsernameTxt, PasswordTxt, FullNameTxt, UserTypeTxt, EmailTxt, AddressTxt, ContactNumberTxt}
    Dim prm = cmd.Parameters.Add(textbox.Name, OleDbType.VarWChar)
    prm.Value = textbox.Text
Next

con.Open()
sql = "INSERT INTO userTable (userName, passWord, fullName, userType, e_mail, home_address, contact_number) values (?, ?, ?, ?, ?, ?, ?)"
cmd.Connection = con
cmd.CommandText = sql

Введение о том, как использовать параметры в ADO. NET, см. здесь .

...