我想从表Products
中检索价格,以便在label2
表单上将其用作orderinfo
。
Dim con As New OleDb.OleDbConnection
Dim com As New OleDb.OleDbCommand
com = New OleDb.OleDbCommand("Select Price FROM Products WHERE ProductName='" & ListBox1.SelectedItem.ToString & "'", con)
con.ConnectionString = "PROVIDER = Microsoft.ACE.OLEDB.12.0; Data Source=Database_AntoninosCafe.accdb"
con.Open()
com.ExecuteNonQuery()
orderInfo.Label2.Text = retrieve data
con.Close()
答案 0 :(得分:0)
解决简单问题的正确方法
Dim cmdText = "Select Price FROM Products WHERE ProductName=?"
Using con = New OleDb.OleDbConnection( ... connection string here ...)
Using com = New OleDb.OleDbCommand(cmdText, con)
com.Parameters.AddWithValue("@p1", ListBox1.SelectedItem.ToString)
con.Open()
Using reader = com.ExecuteReader()
if reader.Read() Then
orderInfo.Label2.Text = reader("Price").ToString
End If
End Using
End Using
End Using
第一件事是使用参数化查询来避免sql注入和解析问题,然后使用Using语句将一次性对象封装在一个代码块中,以确保关闭和处理这些对象。 最后,要从数据表中读取数据,请使用返回OleDbDataReader实例的ExecuteReader命令。这个实例可用于从数据库中提取数据
作为旁注,我使用了问号作为参数的占位符。这是OleDb使用的预定义符号。但是,在将参数值添加到集合时,我使用了不同的名称(@ p1)。这是可以接受的,因为OleDb不使用参数名称来查找查询文本中的相应占位符,如SqlClient或其他提供程序,而是使用占位符的位置。因此,第一个占位符替换为第一个参数,依此类推。