我在自己的电脑中完成了项目后运行正常,但我把项目复制到其它的电脑中运行时出现故障
1 连接超时
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.我已检查了应该关闭的DataReader,Command,Connection都已即时关闭了2 连接数超过最大数
只有我自己在访问怎么会有这么多的连接数了3 我也将对应的iis中的
"应用程序保护"改为了"IIS底进程"应该用的方法都用了不知错在哪??
对了,我的cpu是CY4,而另一台有故障的cup是AMD的这个有关系吗???

解决方案 »

  1.   


    我的代码通用访问数据层===========================using System;
    using System.Data;
    using System.Data.SqlClient;namespace cnhbn.common
    {
    /// <summary>
    /// 负责对数据库的连接
    /// </summary>
    public class DB:IDisposable
    {
    private bool disposed = false;
    private SqlConnection conn; public DB()
    {

    } /// <summary>
    /// 连接数据库
    /// </summary>
    /// <returns></returns>
    public SqlConnection connectionDatabase()
    {
    conn=new SqlConnection("server=.;database=cnhbn2006;uid=sa;Trusted_Connection=False;Connect Timeout=120;Pooling=True;Min Pool Size=1"); conn.Open();
    return conn;
    } //关闭数据库,释放数据库资源
    public bool CloseDataBase()
    {
    Dispose();
    return true;
    } //除去对象资源.
    public void Dispose()
    {
    Dispose(true);
    GC.SuppressFinalize(this);
    } private void Dispose(bool disposing)
    {
    if(!this.disposed)
    {
    if(disposing)
    {
    }
    //cmd.Dispose();
    //sda.Dispose();
    conn.Close();
    }
    this.disposed =true;
    }
    }
    }
      

  2.   

    数据访问层================
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using cnhbn.common;
    using cnhbn.city.entitys;namespace cnhbn.city.dac
    {
    /// <summary>
    /// CityDAC 的摘要说明。
    /// </summary>
    public class CityDAC
    {
    private SqlConnection conn;
    private bool disposed = false;
    private DB db; public CityDAC()
    {
    db=new DB();
    conn=db.connectionDatabase();
    } /// <summary>
    /// 增加城市
    /// </summary>
    /// <param name="city"></param>
    /// <returns></returns>
    public bool addCity(City city)
    {
    bool flag=false;
    try
    {
    string sql="insert T_City(name,spell,provId) values(@name,@spell,@provId)";
    SqlCommand cmd=new SqlCommand(sql,conn);
    cmd.CommandTimeout=0; cmd.Parameters.Add(new SqlParameter("@name",city.Name ));
    cmd.Parameters.Add(new SqlParameter("@spell",city.Spell));
    cmd.Parameters.Add(new SqlParameter("@provId",city.ProvId)); if(cmd.ExecuteNonQuery()>0)
    flag=true;
    cmd.Dispose();
    conn.Dispose(); }
    catch(Exception e)
    {
    Console.WriteLine(e.Message);
    Console.WriteLine("增加城市失败!");
    } Dispose();
    return flag; }
    /// <summary>
    /// 获取所有城市
    /// </summary>
    /// <returns></returns>
    public CityCollection listAllCity()
    {
    CityCollection list=new CityCollection();
    try
    {
    string sql="select * from T_City order by name ";
    SqlCommand cmd=new SqlCommand(sql,conn);
    cmd.CommandTimeout=0;

    SqlDataReader sdr=cmd.ExecuteReader(); while(sdr.Read())
    {
    City city=new City();
    city.Id=Convert.ToInt32(sdr["Id"]);
    city.Name=Convert.ToString(sdr["Name"]);
    city.Spell=Convert.ToString(sdr["Spell"]);
    city.ProvId=Convert.ToInt32(sdr["ProvId"]); list.Add(city);
    }
    sdr.Close();
    cmd.Dispose();
    conn.Dispose();
    }
    catch(Exception e)
    {
    Console.WriteLine(e.Message);
    } Dispose();
    return list; }
    /// <summary>
    /// 按省份取对应的城市
    /// </summary>
    /// <returns></returns>
    public CityCollection listCityByProvId(int provId)
    {
    CityCollection list=new CityCollection();
    try
    {
    string sql="select * from T_City where provId=@provId";
    SqlCommand cmd=new SqlCommand(sql,conn);
    cmd.CommandTimeout=0;

    cmd.Parameters.Add(new SqlParameter("@provId",SqlDbType.Int,4));
    cmd.Parameters["@provId"].Value=provId;

    SqlDataReader sdr=cmd.ExecuteReader(); while(sdr.Read())
    {
    City city=new City();
    city.Id=Convert.ToInt32(sdr["Id"]);
    city.Name=Convert.ToString(sdr["Name"]);
    city.Spell=Convert.ToString(sdr["Spell"]);
    city.ProvId=Convert.ToInt32(sdr["ProvId"]); list.Add(city);
    }
    sdr.Close();
    cmd.Dispose();
    conn.Dispose();
    }
    catch(Exception e)
    {
    Console.WriteLine(e.Message);
    } Dispose();
    return list;

    } /// <summary>
    /// 按城市名称查找城市
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public City getCityByName(string name)
    {
    City city=new City();
    try
    {
    string sql="select * from T_City where name like '%"+@name+"%' order by name";
    SqlCommand cmd=new SqlCommand(sql,conn);
    cmd.CommandTimeout=0; cmd.Parameters.Add("@name",SqlDbType.VarChar,20);
    cmd.Parameters["@name"].Value=name;

    SqlDataReader sdr=cmd.ExecuteReader(); while(sdr.Read())
    {
    city.Id=Convert.ToInt32(sdr["Id"]);
    city.Name=Convert.ToString(sdr["Name"]);
    city.Spell=Convert.ToString(sdr["Spell"]);
    city.ProvId=Convert.ToInt32(sdr["ProvId"]);

    }
    sdr.Close();
    cmd.Dispose();
    conn.Dispose();
    }
    catch(Exception e)
    {
    Console.WriteLine(e.Message);
    } Dispose();
    return city;
    }
    /// <summary>
    /// 查找此城市是否已存在
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public bool isExistCity(string name)
    {
    bool flag=false;
    try
    {
    string sql="select count(*) from T_City where name=@name";
    SqlCommand cmd=new SqlCommand(sql,conn);
    cmd.CommandTimeout=0; cmd.Parameters.Add("@name",SqlDbType.VarChar,20);
    cmd.Parameters["@name"].Value=name;

    int count=Convert.ToInt32(cmd.ExecuteScalar()); if(count>0)
    flag=true;
    cmd.Dispose(); }
    catch(Exception e)
    {
    Console.WriteLine(e.Message);
    }
    return flag; }
    /// <summary>
    /// 按Id取城市信息
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public City getCityInfoById(int id)
    {
    string sql="select * from T_City where id=@id";
    SqlCommand cmd=new SqlCommand(sql,conn);
    cmd.CommandTimeout=0;

    cmd.Parameters.Add("@id",SqlDbType.Int,4);
    cmd.Parameters["@id"].Value=id;

    SqlDataReader sdr=cmd.ExecuteReader();
    City city=new City();
    while(sdr.Read()){
    city.Id=Convert.ToInt32(sdr["id"]);
    city.Name=Convert.ToString(sdr["name"]);
    city.Spell=Convert.ToString(sdr["spell"]);
    city.ProvId=Convert.ToInt32(sdr["provId"]);
    }
    sdr.Close();
    cmd.Dispose();
    conn.Dispose(); Dispose();
    return city;
    } /// <summary>
    /// 更新城市
    /// </summary>
    /// <param name="city"></param>
    public bool updateCityInfo(City city)
    {
    bool flag=false;
    try
    {
    string sql="update T_City set name=@name,spell=@spell where id=@id";
    SqlCommand cmd=new SqlCommand(sql,conn);
    cmd.CommandTimeout=0;

    cmd.Parameters.Add("@id",SqlDbType.Int,4);
    cmd.Parameters["@id"].Value=city.Id; cmd.Parameters.Add("@name",SqlDbType.VarChar,20);
    cmd.Parameters["@name"].Value=city.Name; cmd.Parameters.Add("@spell",SqlDbType.VarChar,20);
    cmd.Parameters["@spell"].Value=city.Spell;
    if(cmd.ExecuteNonQuery()>0)
    flag=true;
    cmd.Dispose();
    conn.Dispose(); }
    catch(Exception e)
    {
    Console.WriteLine(e.Message);
    } Dispose();
    return flag;

    }
    /// <summary>
    /// 删除城市
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public bool removeCity(int id)
    {
    bool flag=false;
    try
    {
    string sql="delete from  T_City where id=@id";
    SqlCommand cmd=new SqlCommand(sql,conn);
    cmd.CommandTimeout=0; cmd.Parameters.Add(new SqlParameter("@id",SqlDbType.Int,4));
    cmd.Parameters["@id"].Value=id; if(cmd.ExecuteNonQuery()>0)
    flag=true;
    cmd.Dispose();
    conn.Dispose();
    }
    catch(Exception e)
    {
    Console.WriteLine(e.Message);
    } Dispose();
    return flag; } //除去对象资源.
    public void Dispose()
    {
    Dispose(true);
    GC.SuppressFinalize(this);
    } private void Dispose(bool disposing)
    {
    if(!this.disposed)
    {
    if(disposing)
    {
    }
    db.CloseDataBase();
    }
    this.disposed =true;
    }}
    }高手看看错在哪???
      

  3.   

    你的代码好像一直都没有关闭conn的因为你执行完存储过程后就cmd.Dispose();
    conn.Dispose();
    进行垃圾释放了所以在
    private void Dispose(bool disposing)
    {
    if(!this.disposed)
    {
    if(disposing)
    {
    }
    //cmd.Dispose();
    //sda.Dispose();
    conn.Close();
    }
    this.disposed =true;
    }
    方法中conn.Close();一直没有执行;
    也就是数据库连接没有关闭;
    不知道我的说法是否正确
      

  4.   

    我测试过conn.state()是closed
      

  5.   

    没对数据操作一次,都需要close掉