首页 > 解决方案 > 将 db 值与文本框值 VB 进行比较

问题描述

我的桌子 **PersonName** 值 Jim、Dan **Department** 值 Manager、User

我使用'System.Environment'将Windows用户名加载到textbox1.text之后,我查询它并将文本框值与db中的PersonName进行比较,如果它匹配,我想获取相关的部门名称,即如果它是'manager'然后我想显示来自 menuitem_click 事件的表单。我的代码在它下面,有人可以帮忙解决这个问题。

Private Sub MySamplesToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles MySamplesToolStripMenuItem.Click
    Dim cn As New SqlClient.SqlConnection("Data Source=ffff;Initial Catalog=ffff;User ID=****;Password=****;")
    Dim cmd As New SqlClient.SqlCommand
    Dim tbl As New DataTable
    Dim da As New SqlClient.SqlDataAdapter
    Dim reader As SqlClient.SqlDataReader
    Dim ta As String
    Try
        cn.Open()
        Dim sql As String
        sql = "select * from dbo.Person where [PersonName] ='" + TextBox1.Text + "'"
        cmd = New SqlClient.SqlCommand(sql, cn)
        reader = cmd.ExecuteReader
        While reader.Read
            ta = reader.Item("Department")
            If ta = 'Maneger' Then
                Form2.Show()
            End If
            ' TextBox2.Text = reader.Item("Department")
            'TextBox2.Text = reader.Item("dob")

        End While
        cn.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub

标签: sqlvb.net

解决方案


无论您如何拼写它,Manager 或 Maneger,只要确保数据库中的内容与您的 If 语句中的内容匹配即可。我想我会使用一个下拉框让您在插入人员的任何位置选择部门,以便部门名称匹配。

Using...End Using即使出现错误,这些块也可确保您的数据库对象已关闭和处置。

您可以将 Sql 语句和连接直接传递给命令的构造函数。如果您只需要部门,请不要用“*”拖下所有日期。

永远不要连接字符串来构建 Sql 语句。黑客可以输入 TextBox1 “Joe; Drop Table dbo.Person;” 使用参数可以阻止这个漏洞,因为.Value参数的 仅被视为一个值而不是可执行代码。

您只期望返回一个值,因此您可以使用.ExecuteScalar它返回结果集中第一行的第一列。

您的代码非常脆弱,因为我怀疑您可能有重复的名称,除非您需要唯一的用户名。

    Private Sub MySamplesToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles MySamplesToolStripMenuItem.Click
    Try
        Using cn As New SqlClient.SqlConnection("Data Source=ffff;Initial Catalog=ffff;User ID=****;Password=****;")
            Using cmd As New SqlClient.SqlCommand("Select Department From dbo.Person Where PersonName = @Name;", cn)
                cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = TextBox1.Text
                cn.Open()
                Dim ta As String = cmd.ExecuteScalar.ToString
                If ta = "Maneger" Then
                    Form2.Show()
                End If
                TextBox2.Text = ta
            End Using
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

推荐阅读