当前位置: 代码迷 >> ASP.NET >> ExecuteReader 要求已打开且可用的连接 有关问题
  详细解决方案

ExecuteReader 要求已打开且可用的连接 有关问题

热度:4621   发布时间:2013-02-25 00:00:00.0
ExecuteReader 要求已打开且可用的连接 问题
之前发过:http://topic.csdn.net/u/20101022/16/d4596a4b-07fc-45f6-a2f2-fbfee071c981?32438

很多朋友也给了建议,但是我改来改去,问题依然存在,就是一会正常,一会不正常。求个位帮帮忙啊!!!!!

问题:

“/zhxy”应用程序中的服务器错误。
--------------------------------------------------------------------------------

ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。


OledbHelper 代码:

C# code
public class OleDbHelper    {        static OleDbConnection conn = null;        static OleDbCommand cmd = null;        static string appPath = System.Web.HttpContext.Current.Request.ApplicationPath;        static string connStr = "provider=microsoft.jet.oledb.4.0;data source="+System.Web.HttpContext.Current.Server.MapPath(appPath + "/App_Data/ZHXYDB.mdb")+"";                public OleDbConnection OpenConnection()        {            try            {                //connStr = ConfigurationManager.ConnectionStrings["DBS"].ToString() + System.Web.HttpContext.Current.Server.MapPath(appPath + "/App_Data/ZHXYDB.mdb");                conn = new OleDbConnection(connStr);                if (conn.State == ConnectionState.Closed)                {                    conn.Open();                }            }            catch { }            return conn;        }        public  void CloseConnection()        {            if (conn.State == ConnectionState.Open)            {                conn.Close();            }        }        public void CloseConnection(OleDbConnection connection)        {            if (connection.State == ConnectionState.Open)            {                connection.Close();            }        }        public object DB_ExecuteScalar(string sqlStr)        {            OleDbConnection conn = OpenConnection();            cmd = new OleDbCommand(sqlStr, conn);            return cmd.ExecuteScalar();        }        public OleDbDataReader ExecuteOdr(string sqlStr, OleDbConnection conn)        {            cmd = new OleDbCommand(sqlStr, conn);            OleDbDataReader odr = cmd.ExecuteReader();            return odr;        }        public int DB_ExecuuteNonQuery(string sqlStr)        {            OleDbConnection conn = OpenConnection();            cmd = new OleDbCommand(sqlStr, conn);            int result = cmd.ExecuteNonQuery();            CloseConnection(conn);            return result;        }        public DataTable DB_Fill(string sqlStr)        {            OleDbConnection conn = OpenConnection();            DataTable dt = new DataTable();            OleDbDataAdapter oda = new OleDbDataAdapter(sqlStr, conn);            oda.Fill(dt);            return dt;        }    }



引用 ExecuteOdr 方法的的代码:

C# code
public MODEL.CompanyInfo GetModel(int id)        {            MODEL.CompanyInfo model = new MODEL.CompanyInfo();            OleDbConnection conn = helper.OpenConnection();            sqlStr = new StringBuilder();            sqlStr.Append("select * from CompanyInfo ");            sqlStr.Append("where ID=" + id + "");            OleDbDataReader odr = helper.ExecuteOdr(sqlStr.ToString (), conn);            if (odr.Read() == true)            {                model.ID = (int)odr[0];                model.InfoTitle = odr[1].ToString();                model.InfoContent = odr[2].ToString();            }            odr.Close();            helper.CloseConnection(conn);            return model;        }


问题到底出在哪?求个位详加指点下,小弟新人,先致敬了!!!

------解决方案--------------------------------------------------------