我有一个包含多行的SQL数据库表。我想根据该行的ID从行中获取数据,然后将其显示在某个文本框中。我已经使用Access 2013,但我最近决定将其转移到SQL。
我收到错误
“已经有一个打开的Datareader与此命令相关联”
在我向您展示代码之前,它非常简单。我有点“使”它与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
我尝试关闭连接并重新打开,但这不起作用。
答案 0 :(得分:0)
为什么这么奇怪的查询和代码;您的SQL查询可以简单地使用IN
运算符
select * from PrinterDetails where ID in (1,2);
BTW,对于您的问题,请检查This MSDN Link,特别是备注部分。实质上,您需要关闭已打开的阅读器。