Ошибка при обновлении базы данных SQLite с помощью VB.Net

Попытка заставить этот код работать, чтобы он обновил мою базу данных SQLite. Продолжайте получать сообщение об ошибке, говорящее о том, что ожидается конец оператора, ошибка BC30205. Я не вижу, чего мне не хватает! Это моя первая попытка оператора обновления в SQL, поэтому я мог пропустить что-то очевидное! Я отметил стрелкой строку кода, с которой у меня возникла ошибка!

Public Partial Class Change_Password
Public Sub New()
    ' The Me.InitializeComponent call is required for Windows Forms designer support.
    Me.InitializeComponent()

    '
    ' TODO : Add constructor code after InitializeComponents
    '
End Sub

Dim SQLconnect As New System.Data.SQLite.SQLiteConnection()
Dim SQLcommand As System.Data.SQLite.SQLiteCommand
Dim SQLreader As System.Data.SQLite.SQLiteDataReader

Dim Password1 As String = ""
Dim Password2 As String = ""

Public Class Password
    Public shared usernamechange As String = ""
End Class

Sub Cmd_NextClick(sender As Object, e As EventArgs)
    If Trim(txt_Password_Box.Text) = "" Then
        MsgBox("Please enter a password")
    Else
        Password1 = txt_Password_Box.Text
        txt_Password_Box.Text = ""
        txt_Password_Box.Focus
        lbl_Instruction.Text = "Please re-enter the exact same password!"
        cmd_Submit.Visible = True
        cmd_Next.Visible = False
        Me.AcceptButton = cmd_Submit
    End If

End Sub

Sub Change_PasswordLoad(sender As Object, e As EventArgs)
    cmd_Submit.Visible = False  
    Me.AcceptButton = cmd_Next
    SQLconnect.ConnectionString = "Data Source=KCD.s3db;"
    SQLconnect.Open()
End Sub

Sub Cmd_SubmitClick(sender As Object, e As EventArgs)
    If Trim(txt_Password_Box.Text) = "" Then
        MsgBox("Please enter the password again")
        Exit Sub
    Else
        Password2 = txt_Password_Box.Text
        txt_Password_Box.Text = ""
    End If



    If Password1 = Password2 Then

        SQLcommand = SQLconnect.CreateCommand

------> SQLcommand.CommandText = "UPDATE Staff SET Password = '" & password1 & "' WHERE '" Username = "' & password.usernamechange & '"""



        SQLcommand.Dispose()

        MsgBox("Your password has been changed",vbInformation,"Password Changed")
        Me.Close

    Else

        MsgBox("Passwords do not match. Please try again.")
        txt_Password_Box.Focus
        cmd_Submit.Visible = False
        cmd_Next.Visible = True
        Password1 = ""
        Password2 = ""
        lbl_Instruction.Text = "Please enter a new password!"
        Me.AcceptButton = cmd_Next
    End If

End Sub
End Class

Надеюсь, кто-нибудь может мне помочь! Спасибо


person Zac Evans    schedule 12.12.2013    source источник


Ответы (1)


Эта линия кажется неправильной. Изменять

SQLcommand.CommandText = "UPDATE Staff SET Password = '" & password1 & "' WHERE '" Username = "' & password.usernamechange & '"""

to

SQLcommand.CommandText = "UPDATE Staff SET Password = '" & password1 & "' WHERE Username = '" & password.usernamechange & "'"

Кстати, объединение таких строк приводит к уязвимости к SQL Injection.

person Szymon    schedule 12.12.2013
comment
Благодарю вас! Он избавился от ошибки, но на самом деле оператор ничего не делает с базой данных! Любые идеи, почему это может быть? - person Zac Evans; 13.12.2013
comment
Запустите оператор select с тем же предложением where и посмотрите, возвращает ли он что-нибудь. - person Szymon; 13.12.2013
comment
Да, я получаю данные, когда запускаю оператор select в той же форме! Я запустил этот оператор SQLcommand.CommandText = SELECT Username FROM Staff WHERE Username = '& username & ' 'Extract data SQLreader = SQLcommand.ExecuteReader() Dim test As String = SQLreader(Username) - person Zac Evans; 14.12.2013
comment
Ах хорошо. Ранее вы говорили, что инструкция ничего не вернула. Но это оператор обновления, он ничего не должен возвращать. - person Szymon; 14.12.2013
comment
Ох, ладно! Извинения за это! Это просто не обновляет ранее существующую запись в базе данных! - person Zac Evans; 14.12.2013
comment
Он работает в клиенте базы данных, с которым я работаю, но не тогда, когда я отправляю его из VB.Net! Есть ли код выполнения, который мне не хватает или что-то в этом роде? - person Zac Evans; 14.12.2013
comment
Я добавил это и все еще не повезло! :/ If Password1 = Password2 Then SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = UPDATE Staff SET Password = '& Password1 & ' WHERE Username = ' & username & ' SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() MsgBox(Ваш пароль был изменен,vbInformation,пароль изменен) Me.Close - person Zac Evans; 14.12.2013
comment
Просто обновление: я сдался, работая над этим прошлой ночью. Вернулся к нему сегодня, и код работал отлично! Большое спасибо за Вашу помощь! :) Действительно ценю это! - person Zac Evans; 14.12.2013