2015-11-10 6 views
0

Я пытаюсь создать экран забытого пароля для моего приложения. Я использую элемент управления вкладками для разных страниц. Мой текущий код способен создать пользователя, но он может создавать дубликаты (что необходимо для исправления). У меня возникает проблема с тем, что экран забытого пароля не работает полностью.Forgot Password Form Issues VB.net

Мой код:

Imports System.Data.OleDb 

Public Class Form2 
Dim connection As New OleDb.OleDbConnection 

Dim dbProvider As String 
Dim dbSource As String 
Dim MyDocumentsFolder As String 
Dim TheDatabase As String 
Dim FullDatabasePath As String 
Dim ds As New DataSet 
Dim da As OleDb.OleDbDataAdapter 
Dim sql As String 
Dim DBTest1 As String 
Dim DBTestP1 As String 
Dim cmd As New OleDbCommand(sql, connection) 
Dim connStr As String 
Dim usernamevalid As Integer 
Dim passwordvalid As Integer 

Public Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 
    If User.Text.Length < 4 Then 
     usernamevalid = 0 
    ElseIf User.Text.Length > 4 Then 
     usernamevalid = 1 
    End If 
    If Pass.Text.Length < 5 Then 
     passwordvalid = 0 
    ElseIf Pass.Text.Length > 5 Then 
     passwordvalid = 1 
    End If 
    If usernamevalid = 0 Then 
     MsgBox("Username Must Be At Least 5 Characters") 
    End If 
    If passwordvalid = 0 Then 
     MsgBox("Password Must Be At Least 5 Characters") 
    End If 
    If passwordvalid And usernamevalid = 1 And Pass.Text = RePass.Text Then 
     dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;" 
     dbSource = "Data Source = C:\Users\Daniel\Documents\Robocopy.accdb" 
     Dim connStr = dbProvider & dbSource 

     DBTest1 = User.Text 
     DBTestP1 = Pass.Text 
     sql = "INSERT INTO Robocopy(username,[password],sq,sqa) VALUES('" & DBTest1 & "','" & DBTestP1 & "','" & SQREG.Text & "', '" & SQAREG.Text & "')" 

     Using connection = New OleDb.OleDbConnection(connStr) 
      Using cmd = New OleDb.OleDbCommand(sql, connection) 
       connection.Open() 
       cmd.ExecuteNonQuery() 
       connection.Close() 
       MsgBox("User Created!") 
       'With cmd.Parameters 
       '.AddWithValue("usernamer", DBTest.Text) 
       '.AddWithValue("password", DBTestP.Text) 
       '.AddWithValue("email", txtsub.text) 
       '.AddWithValue("contactnum", txtau.text) 
       'End With 
       'cmd.ExecuteNonQuery() 
      End Using 
     End Using 
    ElseIf Not Pass.Text = RePass.Text Then 
     MsgBox("Passwords did not match") 
    End If 
End Sub 

Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click 
    Dim result = MessageBox.Show(" Are you sure you want to quit", "Are you sure?", MessageBoxButtons.YesNoCancel) 
    Me.Close() 
End Sub 

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click 
    If NewPass.Text = ReNewPass.Text Then 
     Try 
      connection.Open() 
      cmd = New OleDbCommand("update robocopy set [password] = '" & NewPass.Text & "' where username = '" & UserFGT.Text & "'", connection) 
      cmd.ExecuteNonQuery() 
      MessageBox.Show("PASSWORD CHANGE SUCCESSFULLY") 
      connection.Close() 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
    End If 
End Sub 
End Class 

Исключение ловит это свойство ConnectionString не был инициализирован

В настоящее время я изменил код, что я думаю, что вы имеете в виду:

код Button4 имеет были изменены как таковые:

Private Sub ResetPassword_Click(sender As Object, e As EventArgs) Handles ResetPassword.Click 
    If NewPass.Text = ReNewPass.Text Then 
     Using connection = New OleDb.OleDbConnection(connStr) 
      Using cmd = New OleDb.OleDbCommand(sql, connection) 
       connection.Open() 
       cmd = New OleDbCommand("update robocopy set [password] = '" & NewPass.Text & "' where username = '" & UserFGT.Text & "'", connection) 
       cmd.ExecuteNonQuery() 
       MessageBox.Show("PASSWORD CHANGE SUCCESSFULLY") 
       connection.Close() 
      End Using 
     End Using 

    End If 
End Sub 

Теперь я получаю ошибка для CMD = Новый OleDbCommand ("обновление Robocopy установить [пароль] = '" & NewPass.Text & " ' где имя пользователя ='" & UserFGT.Text & "'", подключение) Я получаю сообщение об ошибке для ЦМД, где он говорит, что переменная «Только для чтения» не может быть целью присвоения

+0

Вы активизировали через код, чтобы увидеть, где ошибка происходит? –

+0

Есть несколько вопросов, и я не уверен, где в этой стене кода я должен смотреть, но 'Button4' никогда (re) не создает действительный объект соединения. Большинство из этих объектов БД должны быть локальными и не согласуться с тем, чтобы использовать SQL-параметры (которые закомментированы). Пароли должны быть хешированы, а не сохранены как открытый текст. – Plutonix

+1

. Ваши имена кнопок не говорят нам, какая кнопка делает что! –

ответ

0

Единственное, что я вижу неправильно со строкой соединения, - это дополнительные пробелы после «Источник данных =».

Вот пример из connectionstrings.com:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;Persist Security Info=False; 
+0

Благодарим за отзыв, но я не думаю, что это проблема, так как он умеет писать в базу данных просто отлично в разделе реестра (он просто может добавить 2 с тем же именем пользователя, что и мне, чтобы выяснить, как перекрестная ссылка) – DaMrZ

+1

@DaMrZ вы можете сохранить, потому что * тот * метод создает объект соединения – Plutonix

+0

Как @Plutonix говорит, вы создаете соединение только в одном месте. Если вы не нажмете кнопку Button1, она не будет доступна ни в одной из других кнопок. –