当前位置:编程学习 > C#/ASP.NET >>

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

数据库连接的类的方法是这样写的
        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())循环的时候又会提示未连接。请问大家是怎么写的。谢谢。
--------------------编程问答-------------------- --------------------编程问答-------------------- 创建阅读器时用这种形式:
OleDbDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);

关闭阅读器时会自动关闭数据连接。 --------------------编程问答--------------------
引用楼主  的回复:
我在另一个按钮执行其它的数据操作的时候,总是提示Connection已打开。myRead.Close()执行的时候,不是Connection已关闭了吗?


并行任务共享 Connection 变量。不是你写了myRead.Close()就关闭了,你要搞懂什么才叫做“关闭”,(相对于这个bug而言)你的关闭代码的位置决定了——根本就没有针对这个问题的发生机制而设计。 --------------------编程问答-------------------- 这里跟 CommandBehavior.CloseConnection 也没有关系,也无需考虑是否应该写为
    using(OleDbDataReader myRead = ut.GetDataReader(.....))
    {
      ....
    }
的问题!

你的Connection根本就会被共享,争用,自然就会出现这个bug。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,