此特定代码ComboBox2.SelectedItem
查询对我的数据库有错误。我想我在此代码ComboBox2.SelectedItem
中缺少了一些内容:
Private Sub UpdateCombo()
ComboBox2.Items.Clear()
SQLcon.Open()
Dim Command As SqlClient.SqlCommand = SQLcon.CreateCommand()
Command.CommandText = "Select productName From tblProductsStocks"
Dim SQLReader As SqlClient.SqlDataReader = Command.ExecuteReader()
While SQLReader.Read()
ComboBox2.Items.Add(SQLReader.Item("productName"))
End While
SQLcon.Close()
End Sub
Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
SQLcon.Open()
Dim Command As SqlClient.SqlCommand = SQLcon.CreateCommand()
Command.CommandText = "Select * From tblProductsStocks WHERE productName=" & ComboBox2.SelectedItem
Dim SQLReader As SqlClient.SqlDataReader = Command.ExecuteReader()
SQLReader.Read()
TextBox1.Text = SQLReader.Item("productType")
TextBox2.Text = SQLReader.Item("productMass")
SQLcon.Close()
End Sub
请启用严格的选项。这是一个两部分的过程。首先针对当前项目-在解决方案资源管理器中,双击我的项目。选择左侧的编译。在Option Strict下拉菜单中,选择ON。第二个用于将来的项目-转到“工具”菜单->“选项”->“项目和解决方案”->“ VB默认值”。在Option Strict下拉菜单中,选择ON。这将使您免于运行时的错误。
需要处理连接并关闭它们,然后将其返回到连接池。如果有错误,您的代码甚至可能无法关闭连接。如果将数据库对象保留在本地,则可以控制它们是否已关闭和处置。即使有错误,Using...End Using
块也会为您解决这一问题。在我的代码中,命令是Using块的一部分。请注意连接构造函数后的逗号。
您可以将连接字符串直接传递给连接的构造函数。同样,将命令文本和连接传递给命令构造函数。
使用参数。它不仅避免了连接字符串的错误,而且还避免了Sql注入。在您的代码中,所选项目应为字符串,但是您未能添加周围的单引号。使用参数时不需要。命令文本是服务器的可执行代码,恶意用户可以输入会破坏数据库的内容。服务器将参数视为值,而不是可执行代码,因此它们更安全。
在.Execute ...之前的最后可能的时刻打开连接。连接是宝贵的资源,需要尽快打开,关闭和处理。只要使用阅读器,连接就必须打开。因此,我将更新用户界面(文本框)移到了using块之外。
Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
Dim String1 As String = ""
Dim String2 As String = ""
Using SQLcon As New SqlConnection("Your connection string"),
Command As New SqlCommand("Select * From tblProductsStocks WHERE productName= @producName", SQLcon)
'Check your database for the actual datatype and field size
Command.Parameters.Add("@productName", SqlDbType.VarChar, 100).Value = ComboBox2.SelectedItem.ToString
SQLcon.Open()
Dim SQLReader As SqlClient.SqlDataReader = Command.ExecuteReader()
SQLReader.Read()
String1 = SQLReader.Item("productType").ToString
String2 = SQLReader.Item("productMass").ToString
End Using 'closes and disposes the connection and command
TextBox1.Text = String1
TextBox2.Text = String2
End Sub