如何读取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
相关产品推荐
相关产品推荐

