怎么在一个类里面使用两个OleDbDataReader?
我用代码如下
string strNoteType="select pno,cname from jx_notetype";
OleDbCommand Comm=new OleDbCommand(strNoteType,MyConn);
OleDbDataReader dr1=Comm.ExecuteReader();
while(dr1.Read())
{
string typeid=dr1["pno"].ToString();
string mno="P001";
int total1=total(mno,typeid);
Response.Write(dr1["cname"].ToString());
Response.Write(total1);
}
dr1.Close();
MyConn.Close();
private int total(string mno,string typeid)
{
string strTotal="select sum(qty) as total from jx_sale where mno='"+mno+"' and typeno='"+typeid+"'";
OleDbCommand Comm=new OleDbCommand(strTotal,MyConn);
OleDbDataReader dr2=Comm.ExecuteReader();
if(dr2.Read())
{
return (int)dr2["total"];
}
else
{
return 0;
}
dr2.Close();
}
运行后出
已有打开的与此连接相关联的 DataReader,必须首先将它关闭。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: 已有打开的与此连接相关联的 DataReader,必须首先将它关闭。
怎么同时打开
string strNoteType="select pno,cname from jx_notetype";
OleDbCommand Comm=new OleDbCommand(strNoteType,MyConn);
OleDbDataReader dr1=Comm.ExecuteReader();
while(dr1.Read())
{
string typeid=dr1["pno"].ToString();
string mno="P001";
int total1=total(mno,typeid);
Response.Write(dr1["cname"].ToString());
Response.Write(total1);
}
dr1.Close();
MyConn.Close();
private int total(string mno,string typeid)
{
string strTotal="select sum(qty) as total from jx_sale where mno='"+mno+"' and typeno='"+typeid+"'";
OleDbCommand Comm=new OleDbCommand(strTotal,MyConn);
OleDbDataReader dr2=Comm.ExecuteReader();
if(dr2.Read())
{
return (int)dr2["total"];
}
else
{
return 0;
}
dr2.Close();
}
运行后出
已有打开的与此连接相关联的 DataReader,必须首先将它关闭。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: 已有打开的与此连接相关联的 DataReader,必须首先将它关闭。
怎么同时打开
...全文
请发表友善的回复…
发表回复
assassin5616 2006-10-24
- 打赏
- 举报
错误提示都已经告诉你该怎么做了嘛,想办法把dr1关掉之后才能打开dr2,所以改一下程序好了
ladOnTheBrinkOfRage 2006-10-24
- 打赏
- 举报
private int total(string mno,string typeid)
{
string strTotal="select sum(qty) as total from jx_sale where mno='"+mno+"' and typeno='"+typeid+"'";
OleDbCommand Comm=new OleDbCommand(strTotal,MyConn);
MyConn.Open();
int i=int.Parse(Comm.Executescale().ToString());
MyConn.Close();
return i;
}
{
string strTotal="select sum(qty) as total from jx_sale where mno='"+mno+"' and typeno='"+typeid+"'";
OleDbCommand Comm=new OleDbCommand(strTotal,MyConn);
MyConn.Open();
int i=int.Parse(Comm.Executescale().ToString());
MyConn.Close();
return i;
}
a97191 2006-10-24
- 打赏
- 举报
那怎么改啊?
zjysky 2006-10-23
- 打赏
- 举报
那是啊
因为一个数据库连接的datareader同时只能打开一个,因为reader是顺序读取的。你的方法可以用两个方法来实现。
如果你一定要用两个datareader的话。在net2.0中是可以,要vs2005 sql2005。在web配置文件中的数据库连接字节中有个专门的属性可以设置一下,叫: 多动态数据集。
因为一个数据库连接的datareader同时只能打开一个,因为reader是顺序读取的。你的方法可以用两个方法来实现。
如果你一定要用两个datareader的话。在net2.0中是可以,要vs2005 sql2005。在web配置文件中的数据库连接字节中有个专门的属性可以设置一下,叫: 多动态数据集。
a97191 2006-10-23
- 打赏
- 举报
大吓,好像不行啊
feiyun0112 2006-10-20
- 打赏
- 举报
total完全可以不用reader
return (int)Comm.Executescale();
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
return (int)Comm.Executescale();
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html