在多个文本框中显示多行

Displaying multiple rows in multiple textboxes

我有一个包含多行的 SQL 数据库 table。我想根据该行的 ID 从行中获取数据,然后将其显示在某个文本框中。我已将它与 Access 2013 一起使用,但我最近决定将其移至 SQL。

我收到一个错误

"There is already an open Datareader associated with this command"

在我向您展示代码之前,它非常简单。我有点 "made" 它适用于 access 2013,但 SQL 不喜欢它。 APP 的工作方式最重要的是将数据显示在文本框中,以便更轻松地修改数据,同时能够有效地切换到下一个框。这就是我没有使用 Gridview 的原因。好吧,我有,但那是资产登记册,没问题。

代码:

Try
        conn.Open()
        '***************** Populate Textboxes based on ID 1 row of PrinterDetails ***************** '
        Dim sql1 As String
        sql1 = "select * from PrinterDetails where ID=1"
        cmd = New SQLCommand(sql1, conn)
        reader = cmd.ExecuteReader
        While reader.Read
            '' Convert to string to prevent DBNULL errors
            SNAME1.Text = reader.Item("SiteName").ToString
            MAKE1.Text = reader.Item("Make").ToString
            MODEL1.Text = reader.Item("Model").ToString
            PRINTERIP1.Text = reader.Item("PrinterIP").ToString
            PSERVER1.Text = reader.Item("Server").ToString
            SHARE1.Text = reader.Item("Share").ToString
            LOC1.Text = reader.Item("Location").ToString
            UN1.Text = reader.Item("Username").ToString
            PASS1.Text = reader.Item("Password").ToString
            SUPPORT1.Text = reader.Item("Support").ToString
        End While
        '***************** Populate Textboxes based on ID 2 row of PrinterDetails ***************** '
        Dim sql2 As String
        sql2 = "select * from PrinterDetails where ID=2"
        cmd = New SQLCommand(sql2, conn)
        reader = cmd.ExecuteReader
        While reader.Read
            '' Convert to string to prevent DBNULL errors
            SNAME2.Text = reader.Item("SiteName").ToString
            MAKE2.Text = reader.Item("Make").ToString
            MODEL2.Text = reader.Item("Model").ToString
            PRINTERIP2.Text = reader.Item("PrinterIP").ToString
            PSERVER2.Text = reader.Item("Server").ToString
            SHARE2.Text = reader.Item("Share").ToString
            LOC2.Text = reader.Item("Location").ToString
            UN2.Text = reader.Item("Username").ToString
            PASS2.Text = reader.Item("Password").ToString
            SUPPORT2.Text = reader.Item("Support").ToString
        End While

我试过关闭连接并重新打开,但这不起作用。

为什么会有这么奇怪的查询和代码;您的 SQL 查询可以像下面这样使用 IN 运算符

select * from PrinterDetails where ID in (1,2); 

顺便说一句,对于您的问题,请特别检查 This MSDN Link 备注 部分。本质上,您需要关闭已经打开的 reader.