日期:2014-05-20  浏览次数:20847 次

请教各位一个OleDbDataReader的问题!
我的函数是这样的:
public   OleDbDataReader   ExecuteReader(string   strOleDb)
{
using(OleDbConnection   conn   =   new   OleDbConnection(this.connectionString))
{
OleDbCommand   cmd   =   new   OleDbCommand(strOleDb,conn);
try
{
conn.Open();
OleDbDataReader   myReader   =   cmd.ExecuteReader();
return   myReader;
}
catch(System.Data.OleDb.OleDbException   e)
{
throw   new   Exception(e.Message);
}
}
}
-----------------
我是这样调用的:
OleDbDataReader   dr   =   odb.ExecuteReader(sql1);
while(dr.Read())
{
strXML.Append( " <Data> ");
for(int   i   =0;i <   Col.Length;i++)
{
strXML.Append( " < "+Col[i].ToString().Trim()+ "> "+dr.GetValue(i).ToString().Trim()+ " </ "+Col[i].ToString().Trim()+ "> ");
}
strXML.Append( " <SEND_STATE> INSERT </SEND_STATE> ");
strXML.Append( " </Data> ");
Value   =   true;
}
dr.Close();
------------------
他提示的错误消息是:
阅读器关闭时   Read   的尝试无效。
------------------------------------------
我就不知道为什么了,请各位帮我看看

------解决方案--------------------
把using去掉
改为
OleDbConnection conn = new OleDbConnection(this.connectionString);
OleDbCommand cmd = new OleDbCommand(strOleDb,conn);
try
{
conn.Open();
OleDbDataReader myReader = cmd.ExecuteReader();
return myReader;
}
catch(System.Data.OleDb.OleDbException e)
{
throw new Exception(e.Message);
}
------解决方案--------------------
同意楼上,using关键字表示不在它的范围后,连接就关闭了,Reader 自然也关闭了!
------解决方案--------------------
最好是将conn做为参数传入, 再使用ExecuteReader的地方先conn.Open()
使用后conn.Close();