为什么VB.NET项目中使用SqlDataReader读取数据仅返回一行?
问题原因与解决方案
- 问题1:SQL语句本身限制返回结果行数
你当前的SQL语句仅筛选了表中Orden#字段等于最大值的记录,默认只会返回符合该条件的少量数据(通常只有1条)。如果你的需求是读取全表数据,将SQL语句修改为:SELECT * FROM OrdenesParaMonitor - 问题2:RichTextBox赋值逻辑错误
循环读取时直接对Text属性赋值,新的内容会覆盖上一次循环写入的内容,最终只会保留最后一行数据。需要改用拼接赋值,同时添加换行符保证格式清晰。
以下是优化后的完整可运行代码,新增了资源自动释放逻辑,避免数据库连接泄漏:
' 请先替换为你的实际数据库连接字符串 Dim connectionString As String = "你的数据库连接参数" Dim strsql As String = "SELECT * FROM OrdenesParaMonitor" Dim OrdenNumero As Integer Dim Articulo As String ' 先清空RichTextBox原有内容 RichTextBox1.Text = "" ' Using语句会在代码执行结束后自动释放连接、命令、阅读器资源,无需手动关闭 Using con As New SqlConnection(connectionString) Using cmd As New SqlCommand(strsql, con) con.Open() Using myreader As SqlDataReader = cmd.ExecuteReader() If myreader.HasRows Then While myreader.Read() OrdenNumero = myreader("Orden#") Articulo = myreader("Articulo") ' 此处默认保留你原有逻辑,将最新的订单号赋值给Label,如需展示所有订单号可改为拼接逻辑 Label1.Text = OrdenNumero.ToString() ' 拼接内容,加换行符分隔不同行数据 RichTextBox1.Text &= Articulo & Environment.NewLine End While End If End Using End Using End Using
如果你确实只需要读取最大Orden#对应的所有关联记录,只保留原SQL语句,按上述方案修改赋值逻辑即可实现多条内容展示。
内容的提问来源于stack exchange,提问作者jumexmango
相关产品推荐
相关产品推荐

