asp.net+access数据库,网页上传到服务器,点击网页中的链接大概超过20次以上时不能读取数据,提示“未指定的错误”!
而在本地机器上调试未报错,代码如下,望高手帮忙指点!using System;
using System.Data;
using System.Data.Common;
using System.Configuration;    /// <summary>
    /// 数据操作类
    /// </summary>
    public class DbHelper
    {
        private static string dbProviderName = ConfigurationManager.AppSettings["DbHelperProvider"];
        private static string dbConnectionString = ConfigurationManager.AppSettings["DbHelperConnectionString"];
        private DbConnection connection;
        
        public DbHelper()
        {
            this.connection = CreateConnection(DbHelper.dbConnectionString);
        }        public DbHelper(string connectionString)
        {
            this.connection = CreateConnection(connectionString);
        }        public static DbConnection CreateConnection()
        {
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
            DbConnection dbconn = dbfactory.CreateConnection();
            dbconn.ConnectionString = DbHelper.dbConnectionString;
            return dbconn;
        }        public static DbConnection CreateConnection(string connectionString)
        {
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
            DbConnection dbconn = dbfactory.CreateConnection();
            dbconn.ConnectionString = connectionString;
            return dbconn;
        }        public DbCommand GetStoredProcCommond(string storedProcedure)
        {
            DbCommand dbCommand = connection.CreateCommand();
            dbCommand.CommandText = storedProcedure;
            dbCommand.CommandType = CommandType.StoredProcedure;
            return dbCommand;
        }
          public DbCommand GetSqlStringCommond(string sqlQuery)
        {
            DbCommand dbCommand = connection.CreateCommand();
            dbCommand.CommandText = sqlQuery;
            dbCommand.CommandType = CommandType.Text;
            return dbCommand;
        }        #region 增加参数
        public void AddParameterCollection(DbCommand cmd, DbParameterCollection dbParameterCollection)
        {
            foreach (DbParameter dbParameter in dbParameterCollection)
            {
                cmd.Parameters.Add(dbParameter);
            }
        }
        public void AddOutParameter(DbCommand cmd, string parameterName, DbType dbType, int size)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.DbType = dbType;
            dbParameter.ParameterName = parameterName;
            dbParameter.Size = size;
            dbParameter.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(dbParameter);
        }
        public void AddInParameter(DbCommand cmd, string parameterName, DbType dbType, object value)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.DbType = dbType;
            dbParameter.ParameterName = parameterName;
            dbParameter.Value = value;
            dbParameter.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(dbParameter);
        }
        public void AddReturnParameter(DbCommand cmd, string parameterName, DbType dbType)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.DbType = dbType;
            dbParameter.ParameterName = parameterName;
            dbParameter.Direction = ParameterDirection.ReturnValue;
            cmd.Parameters.Add(dbParameter);
        }
        public DbParameter GetParameter(DbCommand cmd, string parameterName)
        {
            return cmd.Parameters[parameterName];
        }        public void DeleteDb()
        {
            this.connection.Close();
        }
        #endregion        #region 执行
        public DataSet ExecuteDataSet(DbCommand cmd)
        {
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
            dbDataAdapter.SelectCommand = cmd;
            DataSet ds = new DataSet();
            dbDataAdapter.Fill(ds);
            return ds;
        }        public DataTable ExecuteDataTable(DbCommand cmd)
        {
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
            dbDataAdapter.SelectCommand = cmd;
            DataTable dataTable = new DataTable();
            dbDataAdapter.Fill(dataTable);
            return dataTable;
        }        public DbDataReader ExecuteReader(DbCommand cmd)
        {
            if (cmd.Connection.State == ConnectionState.Closed)
            {
                cmd.Connection.Open();
            }
            DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return reader;
        }
        public int ExecuteNonQuery(DbCommand cmd)
        {
            cmd.Connection.Open();
            int ret = cmd.ExecuteNonQuery();
            cmd.Connection.Close();
            return ret;
        }        public object ExecuteScalar(DbCommand cmd)
        {
            cmd.Connection.Open();
            object ret = cmd.ExecuteScalar();
            cmd.Connection.Close();
            return ret;
        }
        #endregion                #region 执行事务
        public DataSet ExecuteDataSet(DbCommand cmd,Trans t)
        {
            cmd.Connection = t.DbConnection;
            cmd.Transaction = t.DbTrans;
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
            dbDataAdapter.SelectCommand = cmd;
            DataSet ds = new DataSet();
            dbDataAdapter.Fill(ds);
            return ds;
        }        public DataTable ExecuteDataTable(DbCommand cmd, Trans t)
        {
            cmd.Connection = t.DbConnection;
            cmd.Transaction = t.DbTrans;
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
            dbDataAdapter.SelectCommand = cmd;
            DataTable dataTable = new DataTable();
            dbDataAdapter.Fill(dataTable);
            return dataTable;
        }        public DbDataReader ExecuteReader(DbCommand cmd, Trans t)
        {
            cmd.Connection.Close();
            cmd.Connection = t.DbConnection;
            cmd.Transaction = t.DbTrans;            
            DbDataReader reader = cmd.ExecuteReader();
            DataTable dt = new DataTable();            
            return reader;
        }
        public int ExecuteNonQuery(DbCommand cmd, Trans t)
        {
            cmd.Connection.Close();
            cmd.Connection = t.DbConnection;
            cmd.Transaction = t.DbTrans;  
            int ret = cmd.ExecuteNonQuery();            
            return ret;
        }        public object ExecuteScalar(DbCommand cmd, Trans t)
        {
            cmd.Connection.Close();
            cmd.Connection = t.DbConnection;
            cmd.Transaction = t.DbTrans;  
            object ret = cmd.ExecuteScalar();            
            return ret;
        }
        #endregion
    }
=================================================================================================================================
一下是一段读取数据库代码,其他的类同=================================================================================================================================protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
           DbHelper db = new DbHelper();
            DbCommand cmd = db.GetSqlStringCommond("select top 1 * from companyinfo");
            cmd.Connection.Open();
            DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            if (reader.Read())
            {
                lbcmpname.Text = reader["companyname"].ToString();
                lbaddress.Text = reader["address"].ToString();
                lbcode.Text = reader["code"].ToString();
                lbtel.Text = reader["tel"].ToString();
                lbfax.Text = reader["fax"].ToString();
                lblxr.Text = reader["contactpeople"].ToString();
            }
            reader.Close();
            cmd.Dispose();
        }
        catch (DbException ee)
        {
            MessageBox.Show(this, ee.Message);
        }
    }
恳请大家帮忙指点!

解决方案 »

  1.   

    大家帮忙指点,谢谢了!弄了好长时间调试不出来,
            public DbDataReader ExecuteReader(DbCommand cmd) 
            { 
                if (cmd.Connection.State == ConnectionState.Closed) 
                { 
                    cmd.Connection.Open(); 
                } 
                DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
                return reader; 
            } 不知道是不是这个函数有问题
      

  2.   

    有打开的reader没有关闭。1楼里面的代码,当你调试的时候,CommandBehavior.CloseConnection执行后,return reader,这时候时间长了reader好像会变成null。
      

  3.   

    cmd.Connection什么时候关闭的?
      

  4.   


    protected void Page_Load(object sender, EventArgs e) 
        { 
            try 
            { 
              DbHelper db = new DbHelper(); 
                DbCommand cmd = db.GetSqlStringCommond("select top 1 * from companyinfo"); 
                cmd.Connection.Open(); //发生错误的时候这行语句红色,不知是何原因??
                DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
                if (reader.Read()) 
                { 
                   。。
                    
                } 
                reader.Close();
                此处添加cmd.connection.close()也是出现同样的错误!
                cmd.Dispose(); 
            } 
            catch (DbException ee) 
            { 
                MessageBox.Show(this, ee.Message); 
            } 
        } 
    堆栈跟踪: 
    [OleDbException (0x80004005): 未指定的错误]
       System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +1152785
       System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +53
       System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +27
       System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +47
       System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +105
       System.Data.OleDb.OleDbConnection.Open() +37
       QianTai_contact_contac_Small.Page_Load(Object sender, EventArgs e) in d:\Backup\我的文档\Visual Studio 2008\WebSites\FYWL\QianTai\contact\contac_Small.aspx.cs:24
       System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
       System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
       System.Web.UI.Control.OnLoad(EventArgs e) +99
       System.Web.UI.Control.LoadRecursive() +47
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
      

  5.   

    神奇了,拿了你的代碼,去掉沒用的,執行OKo
      

  6.   

    初步懷疑你這裡給的值有問題。
    private static string dbProviderName = ConfigurationManager.AppSettings["DbHelperProvider"]; 
            private static string dbConnectionString = ConfigurationManager.AppSettings["DbHelperConnectionString"]; 參考下我的。
    private static string dbProviderName = "System.Data.SqlClient";
            private static string dbConnectionString = "server=hssqltest;database=LLKDB;integrated security=sspi";
      

  7.   

    CONN没有关闭造成的。用多了所有的数据连接就给用完了