sql - 将 db 值与文本框值 VB 进行比较
问题描述
我使用'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
解决方案
无论您如何拼写它,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
推荐阅读
- javascript - 独立运行的函数内的 Javascript 警报
- visual-studio - 除非连接了 VPN,否则不会安装具有多个源(两个 corp 和两个 Microsoft)的 nuget 包
- reactjs - 你可以在反应中做哪些类型的测试?
- javascript - 如何在反应中显示来自远程 .csv 文件的数据?
- angular - 在Angular中全局阻止ALT键
- android - 我正在尝试让一个在旧版 Android 手机上运行的应用程序在 Galaxy S20 FE 5G 上运行。来自 adb logcat 的日志说“libiconv.so”未找到
- html - 如何使用ngFor Angular从服务器获取json数组中的随机对象
- r - C 如何干扰并行 R 并且可以解决它吗?
- android - 谁能看到为什么我的 Spinner 中没有保存任何输入?
- javascript - 从 jQuery 编辑器获取价值到 PHP