问题是这样的,开始可以正常访问网页,但是访问一段时间后,快则几分钟,慢则一二个小时,出现下面的错误。需要重启iis才能正常访问。但是隔段时间后又会这样,请问是什么问题。 下面贴上我连接数据库的代码
西面是数据库连接代码
==========================================
public class DB
{
    OleDbConnection conn = null;
    OleDbCommand cmd = new OleDbCommand();
    public DB()
    {        string dbname = System.Web.HttpContext.Current.Server.MapPath("App_Data/#[email protected]");        string connStr = "PROVIDER=microsoft.ACE.oledb.12.0;Data Source=" + dbname;
        conn = new OleDbConnection(connStr);
    }
    public OleDbConnection getCon()
    {
        if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
        return conn;
    }
    public void clear()
    {
        if (conn.State == ConnectionState.Open)
            conn.Close();
    }
    public string getScalar(string strSql)
    {
        cmd.Connection = getCon();
        cmd.CommandText = strSql;
        string result = cmd.ExecuteScalar().ToString();
        clear();
        return result;
    }
}就是在 getCon 的 conn.Open() 出错
下面是错误提示
===========================================
“/electech”应用程序中的服务器错误。
--------------------------------------------------------------------------------未指定的错误 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误源错误: 
行 36:         if (conn.State == ConnectionState.Closed)
行 37:             {
行 38:                 conn.Open();
行 39:             }
行 40:         return conn;
 源文件: d:\web\electech\App_Code\DB.cs    行: 38 堆栈跟踪: 
[OleDbException (0x80004005): 未指定的错误]
   System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +968297
   System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86
   System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +29
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +4861516
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
   System.Data.OleDb.OleDbConnection.Open() +40
   DB.getCon() in d:\web\electech\App_Code\DB.cs:38
   DB.getScalar(String strSql) in d:\web\electech\App_Code\DB.cs:49
   about.Page_Load(Object sender, EventArgs e) in d:\web\electech\about.aspx.cs:30
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 

解决方案 »

  1.   

     
    if (conn.State == ConnectionState.Closed) 
                {
                    conn.close(); //关闭之后再重新打开!!
                    conn.Open(); 
                } 
      

  2.   

     这样写试试public OleDbConnection DB() 
        { 
            string dbname = System.Web.HttpContext.Current.Server.MapPath("App_Data/#[email protected]"); 
            string connStr = "PROVIDER=microsoft.ACE.oledb.12.0;Data Source=" + dbname; 
            conn = new OleDbConnection(connStr); 
            return conn;
        }
      

  3.   

    按照一楼的方法修改  conn.Open();前面加了 conn.Close(); 我在个网页 连点了同一个链接7,8次,又出现同样的错误, conn.open();这一行
      

  4.   

    在一个网页出现错误后,点什么网页都是那个错误,必须重启iis才能重新访问。难道是iis的问题?,但是我把程序上传到另一部服务器测试 也是同样的问题。服务器的.netframe3.5sp1 都是最近刚升级的。
      

  5.   

    conn = new OleDbConnection(connStr); 
    这一行不应该就在这里写了
      

  6.   

    本人是.net初哥,各位朋友多多点拔下,这几天给这个问题搞死了,google都翻了几天,也找到几个相同问题的解决方法,一一照做,还是不行。还是照样时不时出错。db.cs这个类里的构造函数 是不是我一直运行同一个aspx文件,构造函数只运行一次?
      

  7.   

    发现一个情况,出错后,狂刷新页面10次左右,又可以访问了,不用重启iis
      

  8.   

    使用数据库操作类
    public static object ExecuteScalar(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
        {
            OleDbCommand cmd = new OleDbCommand();
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                PrepareCommand(cmd, connection, cmdText, commandParameters);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;
            }
        }
    private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn,  string cmdText, OleDbParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
             cmd.Connection = conn;
            cmd.CommandText = cmdText;
            cmd.CommandType = CommandType.Text;
            if (cmdParms != null)
            {
                foreach (OleDbParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }
    权限在临时目录里写文件而产生
    看看web.config是否<system.web>
     <identity impersonate="true"/>
     </system.web>
      

  9.   

    建议你别把con放在构造函数内 放在别的方法内 ;另外你返回的时候是在创建的时候返回最好些个方法值高
    搞打开你试试
      

  10.   

      public void getcon() 
        {         string dbname = System.Web.HttpContext.Current.Server.MapPath("App_Data/#[email protected]");         string connStr = "PROVIDER=microsoft.ACE.oledb.12.0;Data Source=" + dbname; 
            conn = new OleDbConnection(connStr); 
        } 
        public void getCon() 
        { 
            if (conn.State == ConnectionState.Closed) 
                { 
                    conn.Open(); 
                } 
        
        } 这样写试试