Web.config  是这样的http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  
  <system.web>
    <httpRuntime requestValidationMode="2.0" />
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
      </assemblies>
    </compilation>
  </system.web>
  <system.web>
    <customErrors mode="Off"/>
  </system.web>
  <connectionStrings>
    <!-- 配置访问access数据库-->
    <add name="access_con" connectionString="Provider=Microsoft.Jet.Oledb.4.0;data source="/>
    <add name="access_path" connectionString="/App_Data/magazine.mdb"/>
  </connectionStrings>
</configuration>

解决方案 »

  1.   

     连接类 public class DBConnection
        {
            //从配置文件中得到数据库名称  
            public static  string access_con = ConfigurationManager.ConnectionStrings["access_con"].ConnectionString;
            //从配置文件中得到数据库驱动  
            public static  string access_path = ConfigurationManager.ConnectionStrings["access_path"].ConnectionString;
            //得到数据库连接字符串  
            public static  string DBConnectionString = access_con + HttpContext.Current.Server.MapPath(access_path);
            //建立数据库连接对象  
            private  OleDbConnection OleDbConn = new OleDbConnection(DBConnectionString);//初始化数据库连接对象          public DBConnection()
            {        }        public  OleDbConnection getConnection()
            {
                return OleDbConn;
            }  
        }方法是这样写的
            //删除杂志通过id
            public bool DeleteMagazineByID(int id)
            {
                using (OleDbConnection con = new DAL.DBConnection().getConnection())
                {
                    using (OleDbCommand cmd = new OleDbCommand())
                    {                    cmd.CommandText = "delete from db_Magazine where MagazineID=" + @id + "";
                        cmd.Connection = con;
                        cmd.Parameters.Add("@id", OleDbType.Integer).Value = id;
                        con.Open();
                        if (cmd.ExecuteNonQuery() > 0)
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                }
            }
      

  2.   

    初略的看下 是不是因为你没有close的原因??
      

  3.   

       不是用using 就可以了 么 请问
      

  4.   

       不是用using 就可以了 么 请问  是不是还要加上close()啊
      

  5.   

    释放跟关闭是2个概念啊...释放只是说那个东西继承了idisp........然后自动就disp......但是关闭是关闭啊...不一样的...
      

  6.   

    释放跟关闭是2个概念啊...释放只是说那个东西继承了idisp........然后自动就disp......但是关闭是关闭啊...不一样的...请问放在哪呢,这样放的话,会提示无法访问的代码
     //删除杂志通过id
            public bool DeleteMagazineByID(int id)
            {
                using (OleDbConnection con = new DAL.DBConnection().getConnection())
                {
                    using (OleDbCommand cmd = new OleDbCommand())
                    {                    cmd.CommandText = "delete from db_Magazine where MagazineID=" + @id + "";
                        cmd.Connection = con;
                        cmd.Parameters.Add("@id", OleDbType.Integer).Value = id;
                        con.Open();
                        if (cmd.ExecuteNonQuery() > 0)
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                     
                    }
                    con.Close();
                }        }
      

  7.   

    没加using  数据库连接没关闭造成的
    改善下DBConnection类中的代码
      

  8.   

    可是我所有的方法都写了using了 请问还有连接类怎么改善啊,愁死我了  ,做的项目后天就交工了,  不停的报错
    连接类 public class DBConnection
        {
            //从配置文件中得到数据库名称  
            public static  string access_con = ConfigurationManager.ConnectionStrings["access_con"].ConnectionString;
            //从配置文件中得到数据库驱动  
            public static  string access_path = ConfigurationManager.ConnectionStrings["access_path"].ConnectionString;
            //得到数据库连接字符串  
            public static  string DBConnectionString = access_con + HttpContext.Current.Server.MapPath(access_path);
            //建立数据库连接对象  
            private  OleDbConnection OleDbConn = new OleDbConnection(DBConnectionString);//初始化数据库连接对象          public DBConnection()
            {        }        public  OleDbConnection getConnection()
            {
                return OleDbConn;
            }  
        }
      

  9.   

    可是我都加上using了,再加close不知道放在哪了
      

  10.   

    可是我所有的方法都写了using了 请问还有连接类怎么改善啊,愁死我了  ,做的项目后天就交工了,  不停的报错
    连接类 public class DBConnection
        {
            //从配置文件中得到数据库名称  
            public static  string access_con = ConfigurationManager.ConnectionStrings["access_con"].ConnectionString;
            //从配置文件中得到数据库驱动  
            public static  string access_path = ConfigurationManager.ConnectionStrings["access_path"].ConnectionString;
            //得到数据库连接字符串  
            public static  string DBConnectionString = access_con + HttpContext.Current.Server.MapPath(access_path);
            //建立数据库连接对象  
            private  OleDbConnection OleDbConn = new OleDbConnection(DBConnectionString);//初始化数据库连接对象          public DBConnection()
            {        }        public  OleDbConnection getConnection()
            {
                return OleDbConn;
            }  
        }
      

  11.   

    可是我都加上using了,再加close不知道放在哪了 还有就是把List写在using的外面是不是不行啊 /// <summary>
            /// 查询前两行杂志
            /// </summary>
            /// <returns></returns>
            public List<Models.MagazineInfo> SelectAllMagazineInfo()
            {
                List<Models.MagazineInfo> list = new List<Models.MagazineInfo>();
                using (OleDbConnection con = new DBConnection().getConnection())
                {
                    using (OleDbCommand cmd = new OleDbCommand("select top 6 *,(select Nickname from db_Consumer  c  inner join  db_Magazine b on c.ConsumerID=b.ConsumerID where b.MagazineID=m.MagazineID)as Nickname" +
                        "   from  db_Magazine m", con))
                    {
                        con.Open();
                        OleDbDataReader rd = cmd.ExecuteReader();
                        while (rd.Read())
                        {
                            Models.MagazineInfo m = new Models.MagazineInfo();
                            m.Addtime = rd["Addtime"].ToString();
                            m.CodePicture = rd["CodePicture"].ToString();
                            m.ConsumerID = Convert.ToInt32(rd["ConsumerID"]);
                            m.Content = rd["Content"].ToString();
                            m.Phone = rd["Phone"].ToString();
                            m.Title = rd["Title"].ToString();
                            m.NickName = rd["Nickname"].ToString();
                            m.MagazineID = Convert.ToInt32(rd["MagazineID"]);
                            list.Add(m);
                        }
                    }
                }
                return list;
            }
      

  12.   

    1、DBConnection类中 不要创建对象(private  OleDbConnection OleDbConn)
    改成静态方法比较好
     public static  OleDbConnection getConnection()
    {
          return new OleDbConnection(DBConnectionString); //直接返回一个新的实例
    } 调用:
    using (OleDbConnection con = DBConnection.getConnection())2、Web.config   不要用绝对路径, 用|DataDirectory| <add name="connString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|magazine.mdb" providerName="System.Data.OleDb"/>3、SelectAllMagazineInfo方法中
    OleDbDataReader rd = cmd.ExecuteReader(); 加usingusing(OleDbDataReader rd = cmd.ExecuteReader())
    {}
      

  13.   

    从错误信息上看,是创建链接错误。
    1.确保access数据库路径正确;2.确保数据能访问权限;3.数据库访问的代码里面注意close4.增加详细的log,
      

  14.   

    这是 血和泪的教训啊, 我们也遇到过这个问题,后来发现 是 close() 的问题,在程序执行完毕后,一定要写close,不管是查询,导出,导入,修改,都要写的。不然 服务器的应用程序池 两天不到 就会 满了,,,,然后,,,,你懂得。
      

  15.   

    看看下面两个方法里是否有问题
    DAL.ConsumerService.CheckLogin(String account, String password) +228
       MagazineManager.login.Button1_Click(Object sender, EventArgs e) +478
      

  16.   

    应用程序池改下, 启用32位应用程序=true。  否则没法连接ACCESS的。
      

  17.   

    如果过几小时就出现错误 考虑下是否 只open 没有close,最后导致应用程序池无法open了。
      

  18.   

    哎。刚想说 Using 可以保证数据库关闭连接。参见
    http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection.aspx
    【To ensure that connections are always closed, open the connection inside of a using block, as shown in the following code fragment. Doing so ensures that the connection is automatically closed when the code exits the block. 】如果怀疑数据库连接没有被关闭的话,可以Debug一下看看啊。
    如果还是不放心的话,可以在DBConnection 这个类里面实现 IDisposable接口的 Dispose 函数,在这个里面判断你的那个成员变量OleDbConn 是不是被关闭了,如果没有关闭的话就调用Close好了。
      

  19.   

    别用OleDbDataReader,,,,,,这是我的经验
      

  20.   

    是不是连接数的问题 你写sql查一下 连接数不就行了
      

  21.   


    你贴出的代码部分,肯定是不需要再额外写 close 的。它可以确保(不论是正常还是程序异常)都自动执行 close。你的代码中,应该删掉 private  OleDbConnection OleDbConn这一行,直接在函数中返回        public  OleDbConnection getConnection()
             {
                 return new OleDbConnection(DBConnectionString);
             }  
    以避免有别的代码误调用 OleDbConn 变量。其它的,从你在帖子开头的代码中大概就看不出什么问题。应该正在开发环境发现问题,或者是应该在你的开发环境去重现这种问题。因此重要的还是回到测试水准上。在你测试环境上(也许模拟并发5个用户用不同数据访问200次才突然)重现问题,然后立刻进入调试环境,你也许会发现可能是某个sql语句中运用了根本不存在的数据库对象(例如表并不存在),或者别的问题。总之应该让bug出现在调试器上,然后你贴出能够明确指明“哪一个语句、哪一个变量抛出异常”的调试画面,再来问。
      

  22.   

    嗯,重新看了一下你的程序。基本上,使用 Connection时抛出错误,首先要“删除 OleDbConn 变量”,保证多线程(多页面)使用你的“连接类”时的安全。可以先检查有没有地方共享使用 OleDbConn 变量,删除掉它比较保险。
      

  23.   


    你贴出的代码部分,肯定是不需要再额外写 close 的。它可以确保(不论是正常还是程序异常)都自动执行 close。你的代码中,应该删掉 private  OleDbConnection OleDbConn这一行,直接在函数中返回        public  OleDbConnection getConnection()
             {
                 return new OleDbConnection(DBConnectionString);
             }  
    以避免有别的代码误调用 OleDbConn 变量。其它的,从你在帖子开头的代码中大概就看不出什么问题。应该正在开发环境发现问题,或者是应该在你的开发环境去重现这种问题。因此重要的还是回到测试水准上。在你测试环境上(也许模拟并发5个用户用不同数据访问200次才突然)重现问题,然后立刻进入调试环境,你也许会发现可能是某个sql语句中运用了根本不存在的数据库对象(例如表并不存在),或者别的问题。总之应该让bug出现在调试器上,然后你贴出能够明确指明“哪一个语句、哪一个变量抛出异常”的调试画面,再来问。
    真心感谢,解决了,应用池的问题