你能解释一下为什么我不能在程序中使用两个datareader吗?
以下是示例代码:
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时。有用。
为什么我不能使用上面的代码?请解释一下。提前致谢!
答案 0 :(得分:4)
答案 1 :(得分:1)
我之前没有尝试过,但它应该是可能的。
阅读Using Multiple Active Result Sets和,
MSDN上的Enabling Multiple Active Result Sets
请注意这是针对SQL2005及更高版本的。
摘自其中一篇文章:
访问多个结果集 以前版本的SQL Server使用 SqlDataReader对象,单独的 必须使用SqlConnection对象 每个SqlCommand对象。
答案 2 :(得分:1)
This文章解释了问题所在,并介绍了如果使用SQL Server的解决方案。该解决方案称为MARS或多个活动记录集,可在SQL Server 2005及更高版本中使用。