2013-12-17 3 views
1

Привет, кто-то может помочь мне, я совершенно новый для кодирования и только следующий материал, который дал мне мой учитель.InvalidOperationException был необработанным - легко исправить?

Я в настоящее время делает программу VB, подключенный к XAMPP-MySQL базы данных

Я сделал форму Войти, где пользователь/пасс магазин на базе XAMPP. Я включил некоторые проверки присутствия для текстовых полей, и теперь я пытаюсь внедрить функцию в свою программу, где пользователь может изменить свой пароль, используя свою кодовую фразу безопасности.

Моя база данных XAMPP называется: ба-решения Моя таблица называется Логин и мои поля Имя пользователя, пароль и безопасность

Я попытался глядя в Интернете, но ничего не имеет смысла, или имеет отношение ко мне, но это может быть просто потому, что я не понимаю этого, поскольку я новичок в кодировании.

я использовал листы от своего учителя, чтобы написать этот код для программы, но когда я пытаюсь запустить я получаю сообщение об ошибке:

InvalidOperationException был необработанным Произошла ошибка при создании формы. Подробнее см. Exception.InnerException. Ошибка: Формат строки инициализации не соответствует спецификации, начиная с индексом 52.

Вот мой весь мой код из моего Вход формы:

Imports MySql.Data 
Imports MySql.Data.MySqlClient 
Module procedures_and_variables 

Public objconnection As New MySqlConnection("Server=localhost;database=ba-solutions;user id=root;password=") 

Public objdataadapter As New MySqlDataAdapter 
Public objdataset As DataSet 
Public objcommandbuilder As New MySqlCommandBuilder 
Public objdatatable As New DataTable 
Public rowposition As Integer = 0 
Public sqlstring As String 
Public tablename As String 
Public objcommand As MySqlCommand 
Public reader As MySqlDataReader 
Public database_path As String = "Server=localhost;database=ba-solutions;user id=root;password=" 
Public path As String 
Public backup As New MySqlBackup 

'Procedure which checks whether or not the current connection is open and opens it, if it is closed. 
Public Sub connection_checker() 
    If objconnection.State = ConnectionState.Closed Then 
     Try 
      objconnection.Open() 
     Catch ex As MySqlException 
      MsgBox("Error connecting to database") 
     End Try 
    End If 
End Sub 

'Procedure which executes any SQL query. 
Public Sub SQL_executer() 
    Call connection_checker() 

    objdataadapter.SelectCommand = New MySqlCommand 
    objdataadapter.SelectCommand.Connection = objconnection 
    objdataadapter.SelectCommand.CommandText = sqlstring 

    objcommandbuilder = New MySqlCommandBuilder(objdataadapter) 
    objdataadapter.Fill(objdatatable) 
    objdataadapter.SelectCommand.CommandType = CommandType.Text 

End Sub 

'Procedure used to load data from the database for the selected table. 
Public Sub initial_load() 
    Call connection_checker() 
    Call SQL_executer() 

    objdataset = New DataSet 
    objdataadapter.Fill(objdataset, tablename) 
    objconnection.Close() 

End Sub 

'Procedure used to update data in a table with the changes made to the data in the datagrid. 
Public Sub update_data() 
    Call connection_checker() 
    Try 
     objdataadapter.Update(objdataset, tablename) 
     MsgBox("Changes accepted", MsgBoxStyle.Information, "Update successfull") 
    Catch ex As Exception 
     MsgBox("Changes declined", MsgBoxStyle.Critical, "Update unsuccessfull") 

    End Try 
End Sub 

'Procedures used to bind the relevant data to the data grid, with the correct header titles. 
Public Sub bind_dataset_client_details() 
    'NEEDS TO BE COMPLETED FOR ALL DATASETS 
End Sub 
End module 

Public Class frmLogin 
    Dim form_type As Form 
    Dim user_table As String 
    Dim objconnection As New MySqlConnection("Server=localhost;database=ba-solutions;user id=root;password;") 
    Dim sqlstring As String 

Private Sub frmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    objconnection.Open() 
    objdataadapter.SelectCommand = New MySqlCommand 
    objdataadapter.SelectCommand.Connection = objconnection 
    objdataadapter.SelectCommand.CommandText = "Select * FROM Login" 
End Sub 

Private Sub Login_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Login.Click 
    Me.Cursor = Cursors.WaitCursor 

    'Tries to open the server connection and it will give an error if connection fails. 
    Try 
     objconnection.Open() 
    Catch ex As Exception 
     MsgBox("Error connecting to database", MsgBoxStyle.Critical, "Database Error") 
     frmXampp.Show() 
    End Try 

    'Checks if the username textbox contains a value, if it does not, it creates an error provider. 
    If Len(txtUsername.Text) < 1 Then 
     MsgBox("You must enter a username.", MsgBoxStyle.OkOnly, "Login Error") 
    End If 
    'Performs same presence check as above on password textbox. 
    If Len(txtPassword.Text) < 1 Then 
     MsgBox("You must enter a password.", MsgBoxStyle.OkOnly, "Login Error") 
    End If 

    'SQL query 
    sqlstring = "SELECT * FROM Login Where username = '" + txtUsername.Text + "' AND password = '" + txtPassword.Text + "'" 
    'Creates command 
    objcommand = New MySqlCommand(sqlstring, objconnection) 
    'Executes command 
    reader = objcommand.ExecuteReader 

    'See if user exists 
    If reader.Read Then 
     MsgBox("Login Accepted!", MsgBoxStyle.Information, "Login Successful") 
     'Displays the Main Menu form after a successfull login 
     frmMainMenu.Show() 
     Me.Visible = False 
    Else 
     'And if authentication has failed, the user will be given an option to retry or exit 
     reader.Close() 
     Dim prompt As MsgBoxResult 
     prompt = MessageBox.Show("Invalid Username or Password. Please make sure your credentials are correct and try again or exit.", "Login Error", 
    MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning) 
     If prompt = MsgBoxResult.Cancel Then 
      Me.Close() 
     End If 
    End If 
    Me.Cursor = Cursors.Arrow 
End Sub 

Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click 
    Me.Close() 
End Sub 

Private Sub ForgotPassword_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ForgotPassword.Click 
    Dim security, newpassword As String 
    security = InputBox("What is the security passphrase?") 
    sqlstring = "SELECT security FROM Login WHERE security = '" & security & "'" 
    objcommand = New MySqlCommand(sqlstring, objconnection) 
    reader = objcommand.ExecuteReader 

    If reader.Read Then 
     reader.Close() 
     newpassword = InputBox("Enter new password") 
     sqlstring = "UPDATE 'Login' SET 'password' = '" & newpassword & 
      "' WHERE 'Login' . 'password' = '" & security & "'" 
     objdataadapter.SelectCommand.CommandText = sqlstring 
     objdataadapter.SelectCommand.CommandType = CommandType.Text 

     objdataset = New DataSet 
     objdataadapter.Fill(objdataset, "Login") 

     objconnection.Close() 

    Else 
     MsgBox("Invalid Security Passphrase or New Password. Please make sure your credentials are correct and try again.", MsgBoxStyle.Critical, "Authentication Failed") 
     reader.Close() 
    End If 
End Sub 

End Class 

Пожалуйста, имейте в виду, я полный новичок и я был бы очень признателен за любую помощь. Спасибо.

+1

Это звучит как формат строка подключения является недопустимым. В нем говорится, что проблема начинается с позиции 52, так что это, вероятно, парольная часть строки подключения, которая вызывает проблему. –

+0

Остерегайтесь уязвимости SQL-инъекции, которую вы оставили открытой с помощью этой строки: '' SELECT security FROM Login WHERE security = '' & security & "'" '. Вместо того, чтобы объединять пользовательский ввод в ваши строки SQL, вы должны использовать параметры. – jadarnel27

+0

Да. Это еще одна загвоздка. – equisde

ответ

1

Я думаю, что у вас есть недопустимая строка подключения

Попробуйте вместо этого:

Server=localhost;Database=ba-solutions;Uid=root; 
+0

Спасибо за помощь. Это позволило запустить программу еще раз, но теперь она не может подключиться к базе данных. Любые исправления, пожалуйста? EDIT: Все работает нормально, за исключением случаев, когда я заходил в систему даже успешно, он сообщает мне, что ошибка подключения к базе данных и открывает frmXampp? – Livaren

+0

Какая ошибка вы получаете сейчас? – equisde

+0

+1, это хороший улов во всем этом коде. – jadarnel27

Смежные вопросы