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

为什么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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:04