You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取MySQL中同一UserID对应的多行采购数据

如何读取MySQL中同一UserID对应的多行采购记录

我正在使用MySQL数据库,根据UserID读取用户的采购记录,但遇到了瓶颈——不知道如何读取同一ID对应的多行数据。例如:

1, TestProduct
1, TestProduct2

如上所示,当存在多个同一ID的行时,该如何读取所有行?

我目前的代码如下,我知道它无法正常工作,因为它仅能获取找到的第一个ID对应的结果,而我之前不需要处理多行数据,所以现在不知所措:

SearchUser_COMMAND.Parameters.Add("@userid", MySqlDbType.VarChar).Value = Lbl_UserID.Text

Dim reader2 As MySqlDataReader

reader2 = SearchUser_COMMAND.ExecuteReader()


If reader2.Read() Then
  Lbl_Active.Text = reader2(3)
  Lbl_ProductName.Text = reader2(2)
  Lbl_ProductExpire.Text = reader2(6)
End If

解决方案

问题核心是你仅调用了一次reader2.Read(),这个方法每次执行只读取一行数据。要获取所有结果,需要用循环遍历整个数据集:

方法1:用While循环直接遍历并展示数据

如果需要直接把所有采购记录展示到界面(比如用列表控件),可以这样修改:

SearchUser_COMMAND.Parameters.Add("@userid", MySqlDbType.VarChar).Value = Lbl_UserID.Text

' 用Using语句自动释放资源,避免内存泄漏
Using reader2 As MySqlDataReader = SearchUser_COMMAND.ExecuteReader()
    ' 假设用ListBox展示所有产品信息
    ListBox_Products.Items.Clear()
    
    While reader2.Read()
        ' 读取当前行的字段值
        Dim activeStatus = reader2(3).ToString()
        Dim productName = reader2(2).ToString()
        Dim expireDate = reader2(6).ToString()
        
        ' 拼接信息并添加到列表
        ListBox_Products.Items.Add($"产品:{productName} | 状态:{activeStatus} | 到期日:{expireDate}")
    End While
End Using

方法2:将数据存入集合后续处理

如果需要对读取到的所有记录做进一步操作,可以把每行数据存入自定义类或集合:

' 先定义一个存储采购记录的类
Public Class PurchaseRecord
    Public Property ActiveStatus As String
    Public Property ProductName As String
    Public Property ExpireDate As String
End Class

' 读取数据并存入集合
SearchUser_COMMAND.Parameters.Add("@userid", MySqlDbType.VarChar).Value = Lbl_UserID.Text

Dim purchaseList As New List(Of PurchaseRecord)()
Using reader2 As MySqlDataReader = SearchUser_COMMAND.ExecuteReader()
    While reader2.Read()
        Dim record As New PurchaseRecord()
        record.ActiveStatus = reader2(3).ToString()
        record.ProductName = reader2(2).ToString()
        record.ExpireDate = reader2(6).ToString()
        
        purchaseList.Add(record)
    End While
End Using

' 遍历集合处理所有记录
For Each record In purchaseList
    ' 这里可以添加自定义逻辑,比如批量导出、统计等
    Console.WriteLine($"{record.ProductName} - {record.ExpireDate}")
Next

关键注意事项

  • 确保你的SQL查询语句正确,应该是SELECT * FROM 采购表名 WHERE UserID = @userid,这样才能返回该用户的所有采购记录。
  • 始终记得释放MySqlDataReader资源,使用Using语句是最安全的方式,它会自动在代码块结束时关闭reader。

内容的提问来源于stack exchange,提问作者Blooberz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:40:31