在多个文本框中显示多行
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.
我有一个包含多行的 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.