为什么我不能在一个程序中使用两个数据读取器?

发布于 2024-08-12 07:01:26 字数 771 浏览 4 评论 0原文

你能解释一下为什么我不能在程序中使用两个数据读取器吗?

这是示例代码:

Private Sub  Do_Execute()

  Dim conx as SqlConnection
  Dim cmd1 as SqlCommand
  Dim cmd2 as SqlCommand

  Dim drd1 as SqlDataReader
  Dim drd2 as SqlDataReader

  conx = new SqlConnection("connection string")
  conx.Open()

     cmd1 = new SqlCommand("SELECT * FROM Category" , conx)
     drd1 = cmd1.ExecuteReader()

     While (drd1.Read())
     {
        Reading Data From drd1
     }

     cmd2 = new SqlCommand("SELECT * FROM Stock" , conx)
     drd2 = cmd2.ExecuteReader()

     While (drd2.Read())
     {
        Reading Data From drd2
     }

End Sub

当我执行该程序时,它会抛出异常消息: “已经有一个打开的 DataReader 与此命令关联,必须先关闭它!”

当我在初始化 drd2 之前关闭 drd1 时。有用。

为什么我不能使用上面的代码?请解释一下。提前致谢!

can you explain me why I can't use two datareader in on procedure?

Here is the sample code:

Private Sub  Do_Execute()

  Dim conx as SqlConnection
  Dim cmd1 as SqlCommand
  Dim cmd2 as SqlCommand

  Dim drd1 as SqlDataReader
  Dim drd2 as SqlDataReader

  conx = new SqlConnection("connection string")
  conx.Open()

     cmd1 = new SqlCommand("SELECT * FROM Category" , conx)
     drd1 = cmd1.ExecuteReader()

     While (drd1.Read())
     {
        Reading Data From drd1
     }

     cmd2 = new SqlCommand("SELECT * FROM Stock" , conx)
     drd2 = cmd2.ExecuteReader()

     While (drd2.Read())
     {
        Reading Data From drd2
     }

End Sub

When I execute that program, It throws to the exception message :
" There is already an open DataReader associates with this Command which must be closed first! "

When I closed drd1 before drd2 is initialized. It works.

Why I can't use like above code? Please explain me. Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

并安 2024-08-19 07:01:26

这是因为您实际上共享同一个连接。

您需要:
1) 为每个 SqlCommand 使用不同的连接,这是您以前必须执行此操作的原始方式

,或者

2) 按照 此处

It's because you're actually sharing the same connection.

You either need to:
1) use different connections for each SqlCommand, which was the original way you used to have to do this

or

2) use MARS (Multiple Active Result Sets) as described here

江心雾 2024-08-19 07:01:26

我以前没有尝试过,但应该是可能的。

阅读使用多个活动结果集并且,
启用多个活动结果集

MSDN上 请注意,这是针对 SQL2005 及更高版本的。

摘自其中一篇文章:

访问多个结果集
以前版本的 SQL Server 使用
SqlDataReader 对象,一个单独的
SqlConnection 对象必须与
每个 SqlCommand 对象。

I've not tried this before but it should be possible.

Read Using Multiple Active Result Sets and,
Enabling Multiple Active Result Sets on MSDN

Do note this is for SQL2005 and above.

Excerpt from one of the articles:

To access multiple result sets on
previous versions of SQL Server using
SqlDataReader objects, a separate
SqlConnection object must be used with
each SqlCommand object.

无可置疑 2024-08-19 07:01:26

本文解释了问题所在,并且介绍如果您使用 SQL Server 的解决方案。该解决方案称为 MARS(即多个活动记录集),可在 SQL Server 2005 及更高版本中使用。

This article explains what the problem is, and introduces the solution if you are using SQL Server. The solution is called MARS, or Multiple Active Record Sets, and is available in SQL Server 2005 and later versions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文