【问题标题】:please help retrieving data to put it on label请帮助检索数据以将其放在标签上
【发布时间】:2014-03-01 13:31:41
【问题描述】:

我想从Products 表中检索价格,以将其用作orderinfo 表单上的label2

    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()

【问题讨论】:

标签: vb.net oledb


【解决方案1】:

解决简单问题的正确方法

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 或其他提供程序那样使用参数名称在查询文本中查找相应的占位符,而是使用占位符的位置。所以,第一个占位符被第一个参数替换,依此类推。

【讨论】:

  • 不应该 ProductName=?"ProductName=@p1" 或者这真的有效吗?
  • 对于 OleDb,如何命名参数并不重要。重要的是它们出现在集合中的顺序应该与占位符的顺序相同。 Access 允许将占位符命名为您喜欢的任何名称,因此 @p1 绝对不错,但在 OleDb 中表示占位符的预定义字符是问号。
  • 哇,我不知道。但话又说回来,我总是使用SqlCommand。无论如何,谢谢你的解释。
猜你喜欢
  • 1970-01-01
  • 2017-02-08
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
相关资源
最近更新 更多