首页 > 解决方案 > VB.net和Mysql登录问题使用两个表

问题描述

我如何在他的表格中使用医生级别登录。因为每次我登录时接待员表格总是弹出,即使我使用用户登录并通过医生可能我的语法错误请帮助我 PS:医生表格和接待员表格是不同的.

这是我的代码:

Try
    mycon.Open()
    Dim query1 As String
    Dim query2 As String
    Dim name As String
    query1 = "SELECT * FROM receptionisttbl"
    command = New MySqlCommand(query1, mycon)
    reader = command.ExecuteReader

    With reader
        .Read()

        If .Item("level") = "1" Then
            With reader
                .Read()
                name = .Item("name")
            End With
            MsgBox("Welcome " + name)
            Form1.Show()

            command.Dispose()
            reader.Close()
            mycon.Close()
        Else
            mycon.Open()
            query2 = "SELECT * FROM doctortbl"
            command = New MySqlCommand(query2, mycon)
            reader = command.ExecuteReader

            With reader
                .Read()

                If .Item("level") = "2" Then
                    With reader
                        .Read()
                        name = .Item("name")
                    End With
                    MsgBox("Welcome " + name)
                    Form2.Show()

                    command.Dispose()
                    reader.Close()
                    mycon.Close()

                End If
            End With

        End If
    End With

Catch ex As Exception
    MsgBox(ex.ToString)
Finally
    mycon.Dispose()
End Try

标签: mysqlvb.net

解决方案


首先,让我们考虑您的要求。

  1. 提供登录表单以验证用户。

  2. 如果用户有效(在数据库中找到用户名和匹配的密码),则根据用户的级别显示一个表单。

考虑到需求,请查看数据库中表的设计。我们称它为 MDUsers。现在到列。

UserName as an VarChar size 100 and Primary key of the table
UserPassword as VarChar size 100
Level an Integer

现在,您拥有满足您的要求所需的所有数据的字段。

将一些示例数据添加到您的表中。

接下来想想你需要从用户那里得到什么来满足你的要求。相应地设计您的用户界面。您的登录表单将有 2 个文本框(用户名和密码)和一个按钮(登录)。

然后您需要考虑登录按钮的代码。您需要连接到数据库并检查用户名和密码是否匹配。找到匹配项后,您只需检索一条数据即可完成您的要求,即关卡。

现在我们怎么能要求数据库来做这一切呢?

Select level From MDUsers Where userName = @userName And UserPassword = @pword;

由于 userName 是表的主键,我们知道我们将找到不超过一条具有该 userName 的记录。如果密码也匹配,那么我们就有一个有效用户,我们将返回一条数据,该记录的级别。

Using...End Using块确保即使出现错误,您的数据库对象也已关闭和处置。您可以将连接字符串直接传递给连接的构造函数,并将查询字符串和连接传递给命令的构造函数。

始终使用参数。

由于我们只需要一条数据,我们可以使用 .ExecuteScalar

Private Sub OpCode()
    Dim retVal As Object
    Using cn As New MySqlConnection("Your connection string"),
            cmd As New MySqlCommand("Select level From MDUsers Where userName = @userName And UserPassword = @pword;", cn)
        cmd.Parameters.Add("@userName", MySqlDbType.VarChar, 100).Value = txtName.Text
        cmd.Parameters.Add("@pword", MySqlDbType.VarChar, 100).Value = txtPassword.Text
        cn.Open()
        retVal = cmd.ExecuteScalar
    End Using
    If retVal Is Nothing Then
        MessageBox.Show("Login failed")
        Return
    End If
    If CInt(retVal) = 1 Then
        Form1.Show()
    ElseIf CInt(retVal) = 2 Then
        Form2.Show()
    Else
        MessageBox.Show("Level not recognized")
    End If
End Sub

您必须检查 MySql 规则以了解保留字的列名和表名。


推荐阅读