Marky Angel Kevin Garcia Ответов: 3

Помогите! ! С моим читателем = см.метода executereader недействительное исключение операции ООН обрабатываются


может ли кто-нибудь помочь мне с этой ошибкой, я все еще не могу понять, почему она дает сообщение об ошибке во время выполнения qoute "необработанное исключение типа
'System.InvalidOperationException' occurred in MySql.Data.dll"

может кто нибудь исправить мой код пожалуйста ТИА

Что я уже пробовал:

Imports MySql.Data.MySqlClient


Public Class Login
    Public cn As New MySqlConnection("server=localhost;user id=root;password=root;database=elmasgarden")
    Dim cm As New MySqlCommand
    Dim Reader As MySqlDataReader
    Function EscapeQuote(ByVal msData As Object) As String
        Return (Replace(msData, "'", "''"))
    End Function
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnlogin.Click
        Try
            Dim str_user, str_pass As String
            Dim query As String
            DbOpen()
            query = "Select * from login where Username= '" & EscapeQuote(txtuser.Text) & "' AND Password = '" & EscapeQuote(txtpass.Text) & "'"
            cm = New MySqlCommand(query, cn)
            'fatality
            Reader = cm.ExecuteReader
            'ai wins

            Reader.Read()

            If Reader.HasRows Then
                'login success
                str_pass = Reader.Item("Password").ToString
                str_user = Reader.Item("Username").ToString
                lblname.Text = Reader.GetString(1)
                lblusertype.Text = Reader.GetString(5)

            Else
                str_pass = ""
                str_user = ""
                lblname.Text = ""
                lblusertype.Text = ""
            End If


            If txtuser.Text = "" Or txtpass.Text = "" Then
                MsgBox("Please Enter Username and Password", MsgBoxStyle.Information, "")
            ElseIf StrComp(txtuser.Text, str_user, CompareMethod.Binary) Or StrComp(txtpass.Text, str_pass, CompareMethod.Binary) Then
                MsgBox("Invalid Username or Password!", MsgBoxStyle.Exclamation, "")
            End If
            

            Me.Dispose()


            Panels.ShowDialog()

            txtuser.Clear()
            txtpass.Clear()
            
     Catch ex As MySqlException
            MessageBox.Show(ex.Message)
        Finally
            DbClose()
        End Try
 


    End Sub

3 Ответов

Рейтинг:
2

Richard MacCutchan

Пожалуйста, еще раз прочтите все предложения в вашем предыдущем вопросе на эту тему: Дело Vb.net чувствительный использованием инструментальных средств СУБД MySQL [^До тех пор, пока вы продолжаете делать это неправильно, у вас, скорее всего, будут проблемы. Изменения, внесенные вами выше, не исправляют ни одной из этих проблем.


Рейтинг:
1

Wendelius

Как было сказано ранее, для того чтобы ваш оператор SQL работал безопасно и правильно, вам необходимо использовать параметры. Например, см. MySQL :: MySQL Connector/NET руководство разработчика :: 5.6.1 подготовка инструкций в Connector/NET[^]

Кроме того, вы все еще пытаетесь сохранить пароль в виде обычного текста. Ярлыка нет, вам нужно внести соответствующие изменения, чтобы программа работала правильно.


Marky Angel Kevin Garcia

так жаль, сэр им успокаивать пытаются выучить правильные пути, еще раз благодарю вас, сэр его простым для других, но трудно для меня, ха-ха ЛОЛ

Wendelius

Не волнуйтесь, мы все начинали как новички. То, что трудно для вас сегодня, будет легко для вас завтра. Просто попробуйте, и вы заметите, что это не так уж трудно.

И если вы застряли в этом процессе, опубликуйте новый вопрос в Q&A вместе с кодом, как вы это сделали. Здесь много желающих помочь

Желаю удачи :)

Рейтинг:
0

Patrice T

uery = "Select * from login where Username= '" & EscapeQuote(txtuser.Text) & "' AND Password = '" & EscapeQuote(txtpass.Text) & "'"

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]