读书人

ExecuteReader 要求已打开且可用的连接

发布时间: 2012-05-03 14:06:56 作者: rapoo

ExecuteReader 要求已打开且可用的连接 问题
之前发过:http://topic.csdn.net/u/20101022/16/d4596a4b-07fc-45f6-a2f2-fbfee071c981.html?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;        }


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

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


探讨

引用:
你怎么能用静态的static OleDbConnection conn = null;
把这个静态去了,asp.net是多线程,这样很容易出问题。连接有连接池的,所以你不用用静态来提升性能。


去掉 静态后,提示
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以……

[解决办法]
OleDbDataReader odr = OleDbHelper.ExecuteOdr(sqlStr.ToString (), conn);
if (odr.Read() == true)
{
model.ID = (int)odr[0];
model.InfoTitle = odr[1].ToString();
model.InfoContent = odr[2].ToString();
}
//为什么你不释放资源
odr.Dispose();//释放资源
odr.Close();

conn.Close();
return model;

读书人网 >asp.net

热点推荐