请教各位一个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();