Visual Basic Нет данных для строки / столбца - PullRequest
0 голосов
/ 24 октября 2018

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

Call Koneksi()
    Try
        cmd = New Odbc.OdbcCommand("SELECT * FROM tb_user WHERE username = '" & txt_username.Text & "' AND password = '" & txt_password.Text & "'", conn)
        rd = cmd.ExecuteReader
        rd.Read()
        If rd.HasRows = True Then
            txt_akses.Text = rd!hak_akses
            MsgBox("Welcome '" & rd!nama & "'", MsgBoxStyle.Exclamation, "Information")
            MenuCustomer.txt_user.Text = rd!username
            cmd = New Odbc.OdbcCommand("SELECT * FROM tb_permainan WHERE status = 1", conn)
            rd = cmd.ExecuteReader
            rd.Read()
            If txt_akses.Text = "Customer" Then
                If rd.HasRows = False Then
                    txt_username.Text = ""
                    txt_password.Text = ""
                    txt_akses.Text = ""
                    MenuCustomer.Show()
                Else
                    MsgBox("Permainan sedang berlangsung. Mohon Untuk login sesaat lagi", MsgBoxStyle.Exclamation, "Information")
                End If
            Else
                MenuStaff.Show()
            End If
        Else
            txt_username.Text = ""
            txt_password.Text = ""
            txt_akses.Text = ""
            txt_username.Select()
            MsgBox("Username atau password salah", MsgBoxStyle.Exclamation, "Information")
        End If
        rd.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

А вот мой модуль с именем koneksi Imports System.Data.Odbc

Module CRUD
'Setting Koneksi
Public conn As OdbcConnection
Public cmd As OdbcCommand
Public ds As New DataSet
Public da As OdbcDataAdapter
Public rd As OdbcDataReader
Public dt As New DataTable
Public LokasiData As String
Public result As String
Sub Koneksi()
    LokasiData = "Driver={MySQL ODBC 3.51 Driver};Database=db_bubble;server=192.168.1.14;uid=root"
    conn = New OdbcConnection(LokasiData)
    If conn.State = ConnectionState.Closed Then
        conn.Open()
    End If
End Sub

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Я изменил свой код следующим образом, и он все еще показывает ошибку

        Using rd As OdbcDataReader = cmd.ExecuteReader
            If rd.HasRows = True Then
                While rd.Read()
                    txt_akses.Text = rd!hak_akses
                    MsgBox("Welcome '" & rd!nama & "'", MsgBoxStyle.Exclamation, "Information")
                    MenuCustomer.txt_user.Text = rd!username
                    If txt_akses.Text = "Customer" Then
                        cmd2 = New OdbcCommand("SELECT * FROM tb_permainan WHERE status = 1", conn)
                        Using rd2 As OdbcDataReader = cmd2.ExecuteReader
                            If rd2.HasRows = True Then
                                MsgBox("Permainan sedang berlangsung. Mohon Untuk login sesaat lagi", MsgBoxStyle.Exclamation, "Information")
                            Else
                                While rd2.Read()
                                    txt_username.Text = ""
                                    txt_password.Text = ""
                                    txt_akses.Text = ""
                                    MenuCustomer.Show()
                                End While
                            End If
                        End Using
                    Else
                        MenuStaff.Show()
                    End If
                End While
            Else
                txt_username.Text = ""
                txt_password.Text = ""
                txt_akses.Text = ""
                txt_username.Select()
                MsgBox("Username atau password salah", MsgBoxStyle.Exclamation, "Information")
            End If
        End Using

Показанная ошибка зацикливается ..

0 голосов
/ 24 октября 2018

Проверка свойства DataReader.HasRows должна предшествовать методу DataReader.Read(), который должен быть заключен в цикл While, поскольку DataReader - это поток только для пересылки (проверка доступности строки сразу после ExecuteReader()).Этот пример ниже является правильным способом:

Try
    cmd = New Odbc.OdbcCommand("SELECT * FROM tb_user WHERE username = @UserName AND password = @Password", conn)
    cmd.Parameters.AddWithValue("@UserName", txt_username.Text)
    cmd.Parameters.AddWithValue("@Password", txt_password.Text)
    Using rd As OdbcDataReader = cmd.ExecuteReader()
    If rd.HasRows = True Then
        While rd.Read()
            txt_akses.Text = rd!hak_akses
            MsgBox("Welcome '" & rd!nama & "'", MsgBoxStyle.Exclamation, "Information")
            MenuCustomer.txt_user.Text = rd!username
            cmd2 = New Odbc.OdbcCommand("SELECT * FROM tb_permainan WHERE status = 1", conn)
            Using rd2 As OdbcDataReader = cmd2.ExecuteReader()
            If rd2.HasRows = True Then
            While rd2.Read()
                If txt_akses.Text = "Customer" Then
                    If rd.HasRows = False Then
                        txt_username.Text = ""
                        txt_password.Text = ""
                        txt_akses.Text = ""
                        MenuCustomer.Show()
                    Else
                        MsgBox("Game is in progress. Please login for a while", MsgBoxStyle.Exclamation, "Information")
                    End If
                Else
                    MenuStaff.Show()
                End If
            End While
            End If
            End Using
        End While
    Else
        txt_username.Text = ""
        txt_password.Text = ""
        txt_akses.Text = ""
        txt_username.Select()
        MsgBox("Incorrect username or password", MsgBoxStyle.Exclamation, "Information")
    End If
    End Using
Catch ex As Exception
    MsgBox(ex.Message)
End Try

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...