Я думаю, что я тщательно проверил, я указал 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
0
Kai 19 Апр 2020 в 06:52

2 ответа

Лучший ответ

Поздравляем, вы обнаружили одну из причин, по которой важно использовать параметры в ваших командах 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, см. здесь.

0
Zev Spitz 19 Апр 2020 в 04:25

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

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

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

2
jmcilhinney 19 Апр 2020 в 06:40