小弟我建了个类,目的是通过不同的sql语句取得不同的DataReader public class ODBECT
{
private string Oledbconnstring = ConfigurationSettings.AppSettings["OledbConnectionString"].ToString();
private OleDbConnection conn;
private OleDbCommand comm;
private OleDbDataReader dr;
public ODBECT(string comtxt, string path)
{
Oledbconnstring += path;
conn = new OleDbConnection(Oledbconnstring);
comm = new OleDbCommand(comtxt, conn);
conn.Open();
}
public string rein(string comtxt)
{
//comm.Dispose();
//comm.Cancel();
comm = null;
comm = new OleDbCommand(comtxt, conn);
comm.CommandText = comtxt;
try
{
comm.ExecuteNonQuery();
return "ok";
}
catch (Exception e)
{
return e.Message;
}
finally
{
conn.Close();
}
}
public OleDbDataReader datareader()
{
//dr = null;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
public void closdr()
{
dr.Close();
}
public string tesst()
{
return comm.CommandText;
}
}碰到的问题是:无法去两次DataReader
要么是 ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭要么是 已有打开的与此连接相关联的 DataReader,必须首先将它关闭
请大虾帮忙看看其中的问题
{
private string Oledbconnstring = ConfigurationSettings.AppSettings["OledbConnectionString"].ToString();
private OleDbConnection conn;
private OleDbCommand comm;
private OleDbDataReader dr;
public ODBECT(string comtxt, string path)
{
Oledbconnstring += path;
conn = new OleDbConnection(Oledbconnstring);
comm = new OleDbCommand(comtxt, conn);
conn.Open();
}
public string rein(string comtxt)
{
//comm.Dispose();
//comm.Cancel();
comm = null;
comm = new OleDbCommand(comtxt, conn);
comm.CommandText = comtxt;
try
{
comm.ExecuteNonQuery();
return "ok";
}
catch (Exception e)
{
return e.Message;
}
finally
{
conn.Close();
}
}
public OleDbDataReader datareader()
{
//dr = null;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
public void closdr()
{
dr.Close();
}
public string tesst()
{
return comm.CommandText;
}
}碰到的问题是:无法去两次DataReader
要么是 ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭要么是 已有打开的与此连接相关联的 DataReader,必须首先将它关闭
请大虾帮忙看看其中的问题
解决方案 »
- 在gridview中href跳转后不刷新
- 假设成立之后,是使用js,还是使用interface接口,还是...
- 在一个页面中,用代码加载一个用户控件
- 怎样备份数据库服务器上的数据到本机(客户机器)上?
- TextBox允许换行的正则
- DataGrid 添加LinkButton编辑按钮,__doPostBack 函数的问题
- DataList的问题,我在DataList中添加了一个选择按钮,且在SelecteItemTemplate中添加了一个取消按钮,但是这个取消按钮
- NPOI生成excel文档后下载?
- 如何让IE与火狐的Cookie、Session通用
- asp.net在线观看视频的技术
- 请问调用基类构造函数在EA的类图中怎么表示?
- asp.net页面对应的后台cs怎么获取web页面高度
而此时,旧的reader还没有关
此时的conn是不能继续执行任何Command的设计的不太好
不推荐返回Reader,因为他是基于连接的
前台调用了 closdr() 再使用 rein(sql) rein里comm也重新定义了新的command了阿, 可再用datareader()就报无连接,可是我输出tesst()
的时候,又是有值得阿
二楼所说的,datareader关闭后就不可用了 ,我也试过不调用关闭closdr(),直接调用rein(sql) ,我想rein里comm也重新定义了新的command,可报错就是已经有关联的 DataReader,不推荐返回Reader的话,用什么方法能达到直接返回数据呢?
public string rein(string comtxt)
{
using(OleDb dr=comm.ExecuteDataReader())
{
}
}
这样?可是报错comm.ExecuteDataReader()
指教下