首页 > 解决方案 > 我的数据没有显示在数据库的文本框中

问题描述

这是我尝试过的代码。这段代码在我的测试表单上并且可以工作,但是现在在我的最终系统中它不起作用,尽管它们是相同的。

Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM Products where Barcode like '" & Barcodetxt.Text & "'", myConnection)
Dim userFound As Boolean = False
Dim dr As OleDbDataReader = cmd.ExecuteReader
Dim da As New OleDbDataAdapter

If (dr.Read() = True) Then
    While dr.Read
        userFound = True
        prdct = dr("Product")
        prc = dr("Price")
        brcddb = dr("BarCode")
        dscrtn = dr("description")
    End While

    TextBox1.Text = prc
    Barcodetxt.Text = ""
    ProducttxtBE.Text = prdct
    Subtotaltxt.Text = prc
    DescriptionBE.Text = dscrtn
    pricetxtBE.Text = prc
    BarcodetxtBE.Text = brcddb
    Quantitytxt.Text = 1
    Timer1.Enabled = False

标签: vb.net

解决方案


每次调用时Read,您都会前进到下一个记录。如果您已经阅读了最后一条记录并Read再次调用,则您会跳过最后一条记录,因此没有数据。您要检索多少条记录?估计是一个。这意味着您需要调用多少次Read?一次。你打了多少次电话Read?两次。看到问题了吗?

您需要将它们放在一起并学习如何使用Read方法和HasRows属性。以下是一些场景以及您应该如何使用这些成员:

  1. 您正在检索零行或一行,并且您想在每种情况下做一些不同的事情。在这种情况下,您将调用Read并捕获结果。如果是则按要求执行False,即没有行,如果是则使用数据True,例如
If reader.Read() Then
    myTextBox.Text = reader.GetString(reader.GetOrdinal("Column1"))
Else
    MessageBox.Show("No results")
End If
  1. 您正在检索零个或多个行,如果没有行,您不需要做任何特别的事情。在这种情况下,您将Read在循环中调用并在阅读时使用每条记录,例如
While reader.Read()
    'Use current record here.
End While
  1. 您正在检索零个或多个行,并且如果没有行,您想要做一些特定的事情。在这种情况下,您将用于HasRows确定是否有行,如果没有则按要求执行,然后Read如果有行则在循环中调用,例如
If reader.HasRows Then
    While reader.Read()
        'Use current record here.
    End While
Else
    MessageBox.Show("No results")
End If

目前尚不完全清楚您的一般情况是什么,但您需要确定是否调用Read,如果是,调用多少次,以及是否测试HasRowsRead不过,作为一项规则,您需要在每次通话后立即实际使用当前记录。如果您曾经Read两次调用而中间没有使用数据,那么您几乎肯定做错了。


推荐阅读