问一个简单的OleDB数据库连接的DataReader问题

阿飞666888 2012-09-28 06:59:27
数据库连接的类的方法是这样写的
public OleDbDataReader GetDataReader(string strSQL)
{
Connection.Open();
OleDbCommand command = new OleDbCommand(strSQL, Connection);
OleDbDataReader dataReader = command.ExecuteReader();
//Connection.Close(); //ABC注释
return dataReader;
}
窗体Load调用如下:
OleDbDataReader myRead = ut.GetDataReader("Select TypeID,TypeName from WordType");
while (myRead.Read())
{
tvType.Nodes.Add(myRead["TypeName"].ToString());
}
myRead.Close();
我在另一个按钮执行其它的数据操作的时候,总是提示Connection已打开。myRead.Close()执行的时候,不是Connection已关闭了吗?如果我把ABC注释那里取消注释,while (myRead.Read())循环的时候又会提示未连接。请问大家是怎么写的。谢谢。
...全文
130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这里跟 CommandBehavior.CloseConnection 也没有关系,也无需考虑是否应该写为
using(OleDbDataReader myRead = ut.GetDataReader(.....))
{
....
}
的问题!

你的Connection根本就会被共享,争用,自然就会出现这个bug。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我在另一个按钮执行其它的数据操作的时候,总是提示Connection已打开。myRead.Close()执行的时候,不是Connection已关闭了吗?
[/Quote]

并行任务共享 Connection 变量。不是你写了myRead.Close()就关闭了,你要搞懂什么才叫做“关闭”,(相对于这个bug而言)你的关闭代码的位置决定了——根本就没有针对这个问题的发生机制而设计。
dalmeeme 2012-09-28
  • 打赏
  • 举报
回复
创建阅读器时用这种形式:
OleDbDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);

关闭阅读器时会自动关闭数据连接。
孟子E章 2012-09-28
  • 打赏
  • 举报
回复
OleDbDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);

这样才能关闭

http://msdn.microsoft.com/zh-cn/library/aet5yz0b.aspx

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧