首页 > 解决方案 > 如何解决登录表单中的 if 语句

问题描述

每当我点击未注册到数据库的 RFID 时,它都不会显示 msgbox。我使用了一些条件语句,但它也不起作用。我尝试了不等于运算符但也没有用

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    process1:
    Try

        rec = New ADODB.Recordset
        rec.Open("SELECT * from admin where rfid='" & TextBox4.Text & "'", con, 1, 2)

        Dim y As Integer
        y = 0

        While Not rec.EOF

            rec.MoveNext()
            y = y + 1

        End While

        If y = 1 Then
                Timer1.Stop()
                Me.Hide()
                MsgBox("VALID RFID! WELCOME ADMIN!")
                SystemForm.Show()
                TextBox4.Text = ""

            If y <> 1 Then

                Timer1.Stop()
                MsgBox("Invalid RFID NO.!")
                TextBox4.Text = ""

            End If

        End If


    Catch ex As Exception
        Timer1.Stop()
        MsgBox("Invalid RFID NO.!")
        TextBox4.Text = ""
    End Try

End Sub

标签: vb.netvisual-studio-2010

解决方案


首先,为什么要使用已有十年历史的开发工具。Visual Studio 2019 社区可免费下载。

完全摆脱这些Timer,只需使用登录按钮。

让我们进入当前十年并使用ADO.net而不是ADODB.

由于我不知道您使用的是什么数据库,所以我举了一个使用 Sql Server 的示例。如果数据库是 Access,那么您必须将 Sql 数据库对象更改为 OleDb 对象。在文件顶部导入以下内容之一。

Imports System.Data.SqlClient

或者

Imports System.Data.OleDb

数据库对象需要关闭和处置。Using...End Using即使出现错误,blocks 也会为您解决这个问题。您可以将连接字符串直接传递给连接的构造函数,将命令文本和连接直接传递给命令的构造函数。请注意,它们都包含在同一个 Using 块中。

当您只需要计数时,不要拉下数据。只求数。永远不要连接字符串来构建 Sql 查询。始终使用参数来避免 Sql 注入。

我不得不猜测 rfid 的数据类型。检查数据库的实际类型并相应地调整代码。

.ExecuteScalar如果结果集返回第一行,第一列。在这种情况下,记录计数。

请注意,直到.Execute.... 它在使用 后立即关闭End Using。在连接关闭之前,我们不会开始比较结果并显示消息框。

如果您尝试此代码但它不起作用,请告诉我们错误是什么以及它发生在哪一行。

Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Tick
    Dim RetVal As Integer
    Using cn As New SqlConnection("Your connection string"),
            cmd As New SqlCommand("Select Count(*) Form admin Where rfid = @rfid;", cn)
        cmd.Parameters.Add("@rfid", SqlDbType.Int).Value = CInt(TextBox4.Text)
        cn.Open()
        RetVal = CInt(cmd.ExecuteScalar)
    End Using
    If RetVal = 1 Then
        MsgBox("VALID RFID! WELCOME ADMIN!")
        SystemForm.Show()
        Me.Hide()
    Else
        MsgBox("Invalid RFID NO.!")
    End If
    TextBox4.Text = ""
End Sub

推荐阅读