2016-01-02 2 views
0

Я пытаюсь получить доступ к базе данных MySql, но получаю эту ошибку:InvalidOperationException ocurred

Exception thrown: 'System.InvalidOperationException' in MySql.Data.dll

Additional information: The CommandText property has not been properly initialized.

Это будет мой код

Imports MySql.Data.MySqlClient 

Public Class Login 
    Dim cn As New MySqlConnection 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     cn.ConnectionString = "server=localhost; userid=root; password=root; database=pos" 
     cn.Open() 
     MsgBox("Connected") 
    End Sub 

    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click 
     cn.Close() 
     Dim myadapter As New MySqlDataAdapter 
     Dim sqlquery = "SELECT * from pos.values where username='" & txtUsername.Text & "' AND password='" & txtPassword.Text & "'" 
     Dim mycommand As New MySqlCommand 
     mycommand.Connection = cn 
     cn.Open() 
     myadapter.SelectCommand = mycommand 
     Dim mydata As MySqlDataReader 
     mydata = mycommand.ExecuteReader 
     If mydata.HasRows = 0 Then 
     Beep() 
     MsgBox(txtUsername.Text & " Invalid") 
     Else 
     MsgBox("Welcome " & txtUsername.Text) 
     MainWindow.Show() 
     Me.Hide() 
     cn.Close() 
     End If 
    End Sub 
End Class 
+0

Привет Вон и добро пожаловать на сайт! Я просто сделал несколько небольших изменений в вашем вопросе, чтобы сделать его более привлекательным для ответчиков. (Улучшено форматирование кода, удалено посторонний код и добавлена ​​проблема в верхней части). Надеюсь, вы не против. Не забывайте, что если кто-то ответит на ваш вопрос и решит вашу проблему, вы можете нажать на галочку «Принять» ответ. Это помогает любому, кто приходит позже с той же проблемой. Ура! – JumpingJezza

+0

Вам нужно назначить свой текстовый запрос своей команде - ошибка говорит вам об этом –

ответ

0

Так же, как ошибка говорит, что вы никогда не установить CommandText недвижимость объекта MySqlCommand. Вы определили запрос SELECT, но никогда не используете его нигде. Установите его на объект команды, прежде чем пытаться использовать этот объект:

mycommand.CommandText = sqlquery 

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

Также: Вы храните пароли пользователей в простой текст. Это grossly irresponsible вашим пользователям. Если вы можете прочитать свой пароль, значит, и злоумышленник. Пользовательские пароли должны быть закрыты односторонним хешем, чтобы они могли читать , а не как, даже если вы не являетесь владельцем системы.

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