using System;
using System.Data;
using System.Text;using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class smsgroup : System.Web.UI.Page
{
    string RequestUserID = "";
    string RequestUserQX = "";
    string RequestUserqxstr = "";
    string RequestUserName = "";
    string RequestUserZZTT = "";
    string RequestUserGroup = "";
    string RequestUserCode = "";    protected void Page_Load(object sender, EventArgs e)
    {
        RequestUserID = Request.Cookies["UserID"].Value;
        RequestUserQX = Request.Cookies["UserQX"].Value;
        RequestUserqxstr = Request.Cookies["Userqxstr"].Value;
        RequestUserName = HttpUtility.UrlDecode(Request.Cookies["UserName"].Value);
        RequestUserZZTT = Request.Cookies["UserZZTT"].Value;
        RequestUserGroup = Request.Cookies["UserGroup"].Value;
        RequestUserCode = Request.Cookies["UserCode"].Value;
        if (!IsPostBack)
        {
            if (Convert.ToInt32(RequestUserZZTT) < 9)
            {
                Response.Redirect("usergrinfo.aspx");
            }
            AspNetPager1.RecordCount = getpagecount();
            bindData();        } 
    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (DropDownList1.SelectedValue == "0")
        {
            Response.Redirect("");
        }
        if (DropDownList1.SelectedValue == "1")
        {
            Response.Redirect("smsgroup.aspx");
        }
        if (DropDownList1.SelectedValue == "2")
        {
            Response.Redirect("smsgusr.aspx");
        }
        if (DropDownList1.SelectedValue == "3")
        {
            Response.Redirect("sjgl.aspx");
        }
        if (DropDownList1.SelectedValue == "4")
        {
            Response.Redirect("SMS_Accp.aspx");
        }
        if (DropDownList1.SelectedValue == "5")
        {
            Response.Redirect("newsms.aspx");
        }
    }
    protected void sall(object sender, EventArgs e)
    {
        System.Web.UI.WebControls.CheckBox chkExport;
        System.Web.UI.WebControls.CheckBox chkExport1;
        chkExport = (CheckBox)((DataListItem)dlgwlist.Controls[0]).FindControl("selectAll");
        if (chkExport.Checked)
        {
            foreach (DataListItem odatalistIt in dlgwlist.Items)
            {
                chkExport1 = (CheckBox)odatalistIt.FindControl("selectCB");
                chkExport1.Checked = true;
            }
        }
        else
        {
            foreach (DataListItem odatalistIt in dlgwlist.Items)
            {
                chkExport1 = (CheckBox)odatalistIt.FindControl("selectCB");
                chkExport1.Checked = false;
            }
        }
    }    protected void Button4_Click(object sender, EventArgs e)
    {
        Response.Redirect("editsmsgroup.aspx?id=0");
    }
    protected void Button2_Click(object sender, EventArgs e)
    {    }    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        AspNetPager1.RecordCount = getpagecount();
        bindData();
    }    void bindData()
    {
        dlgwlist.DataSource = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "P_GetPageSmsGroup",
            new SqlParameter("@startIndex", AspNetPager1.StartRecordIndex),
            new SqlParameter("@pageSize", AspNetPager1.PageSize),
            new SqlParameter("@groupgs", Convert.ToInt32(RadioButtonList1.SelectedValue.ToString())),
            new SqlParameter("@keys", cznr.Text.ToString()));
        dlgwlist.DataBind();
    }
    protected void AspNetPager1_PageChanged(object src, EventArgs e)
    {
        bindData();
    }
    private int getpagecount()
    {
        int totalOrders = (int)SqlHelper.ExecuteScalar(CommandType.StoredProcedure, "P_GetSmsGroupNumber",
            new SqlParameter("@groupgs", Convert.ToInt32(RadioButtonList1.SelectedValue.ToString())),
            new SqlParameter("@keys", cznr.Text.ToString()));
        return totalOrders;
    }    private int getsmsgroupGS(int musid)
    {
        int gsnum = 0;
        string sql = "select gs from smsusr_group where id = " + musid;
        DataBase db = new DataBase();
        SqlDataReader dr = db.ExecuteReader(sql);
        if (dr.Read())
        {
            gsnum = Convert.ToInt32(dr["gs"].ToString().Trim());
        }
        return gsnum;
        dr.Close();
        db.Close();
    }
    protected void dlgwlist_ItemCommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName == "cmddel")
        {
            string keynum = dlgwlist.DataKeys[(int)e.Item.ItemIndex].ToString().Trim();
            string keynum1 = "~" + keynum + "~";
            DataBase db = new DataBase();
            string sql = "delete from smsusr_group  WHERE  id = " + keynum;
            db.ExecuteSQL(sql);
            string sql1 = "select id,groupid from smsusr  WHERE  groupid like '%" + keynum1 + "%'";//这个有问题!
            SqlDataReader dr = db.ExecuteReader(sql1);
            while (dr.Read())
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(dr["groupid"].ToString());
                sb.Replace(keynum1 + ",","");
                DataBase db1 = new DataBase();
                string sqlup;
                if (sb.Length > 0)
                {
                    sqlup = "update smsusr set groupid = '" + sb.ToString() + "' where id = " + dr["id"] + "";                
                }
                else
                {
                    sqlup = "delete from smsusr where id =  " + dr["id"] + "";                    
                }
                db1.ExecuteSQL(sqlup);
                db1.Close();
            }
            dr.Close();
            db.Close();
            AspNetPager1.RecordCount = getpagecount();
            bindData();        }
        if (e.CommandName == "smsusr")
        {
            Response.Redirect("smsgusr.aspx?gid=" + dlgwlist.DataKeys[(int)e.Item.ItemIndex].ToString().Trim());
        }
        if (e.CommandName == "editusrgroup")
        {
            Response.Redirect("editsmsgroup.aspx?id=" + dlgwlist.DataKeys[(int)e.Item.ItemIndex].ToString().Trim());
        }
    }
         protected void numgroup(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            int numid = Convert.ToInt32(dlgwlist.DataKeys[(int)e.Item.ItemIndex].ToString().Trim());
            string str;
            string strnum = "~" + numid.ToString().Trim() + "~";
            DataBase db = new DataBase();
            if (getsmsgroupGS(numid) == 0)
            {
               str = "select count(*) as rcount from smsusr where groupid like '%" + strnum + "%'";            }
            else
            {
                str = "select count(*) as rcount from user_info where groupid like '%" + strnum + "%'";            }            SqlDataReader dr = db.ExecuteReader(str);
            if (dr.Read())
            {
                int pnum = Convert.ToInt32(dr["rcount"].ToString());
                ((Label)e.Item.FindControl("lbgnum")).Text = pnum.ToString();
            }
            dr.Close();
            db.Close();
        }
    }
    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        AspNetPager1.RecordCount = getpagecount();
        bindData();
    }
}

解决方案 »

  1.   

    代码可够长的,一点注释也没有... ...超时,会不会是这两个操作太占用数据库而超时。检查一下存储过程
    AspNetPager1.RecordCount = getpagecount();
    bindData();
      

  2.   

    最有可能的是打开的DataReader没有关闭,楼主检查一下吧,然后结贴给分,活活
      

  3.   

    出错信息帖出来,看下是IIS超时还是SQL超时
      

  4.   

    超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。源错误: 
    行 22:     {
    行 23:         con = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
    行 24:         con.Open();
    行 25:     }
    行 26: 
     源文件: e:\DZZW\dzzwadmin\App_Code\DataBase.cs    行: 24 
      

  5.   

    另外.....LZ可以打开SQL的时间探察器看看
      

  6.   

    关键代码就够了。这么长怎么看啊,而且都是白皮!可以试试LS的查看SQL事件查询器
      

  7.   

    终于看明白了
    ===========
    解决方法(*):
    WEB.config 里面:
    在数据库连接加 Max Pool Size = 512;
    server=local;uid=;pwd=;database=2007;Max Pool Size = 512;">
      

  8.   

    你看以下你访问数据库的权限,05的Sql需要给数据库文件加Asp.Net用户的权限。
      

  9.   

    优化一下你的SQL吧,或者优化一下你的访问数据代码
      

  10.   

    DataBase db = new DataBase();
     SqlDataReader dr = db.ExecuteReader(sql1);
    楼主检查一下你的DataBase 类的ExecuteReader(string sql)方法中
    返回DataReader时的方法
    比如下面的语句
    SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    return myReader;
    如果没有使用CommandBehavior.CloseConnection这个重载
    那你将来的dr.Close()将是无效的
      

  11.   

    你的那个Database类写的有问题 打开的连接没有及时关闭 引起的原因有多种 或是你没有异常处理 调试或运行过程如果出错没有关闭当前连接 每次调试/运行都会滞留下未关闭的连接 累积到缓冲池允许的最大连接数便会出错
    或者是你用了try /catch捕获异常 但在处理语句中没有再次处理 导致异常被毫无知觉得屏蔽掉 这样要检查到出错点非常困难 但见你上面的程序没有一处异常处理 数据库连接的处理流程也不科学 比如下面
        private int getsmsgroupGS(int musid)
        {
            int gsnum = 0;
            string sql = "select gs from smsusr_group where id = " + musid;
            DataBase db = new DataBase();
            SqlDataReader dr = db.ExecuteReader(sql);
            if (dr.Read())
            {
                gsnum = Convert.ToInt32(dr["gs"].ToString().Trim());
            }
            return gsnum;
            dr.Close();
            db.Close();
        }
    如果没有成功读到数据 即if(!dr.Read()) 那后面的dr.Close()就会出错了 如果gsnum = Convert.ToInt32(dr["gs"].ToString().Trim())这句出错 程序就执行不到db.close() 又多出一个剩余连接 就是上面说到的情况
    你程序都是这样处理的 建议修改 再跟踪下程序吧 别忘了给分哦
      

  12.   

    解决方法(*):
    WEB.config 里面:
    在数据库连接加 Max Pool Size = 512;
    server=local;uid=;pwd=;database=2007;Max Pool Size = 512;">
    -----------------------------------------------------------
    此方法不可取,并没有真正解决问题,只是扩大的连接池大小而已,还会出错的
      

  13.   

    代码太多我也懒得看了,总之这种原因就是数据库占用太大或者服务器内存太小。1.检查是否查询以后有未关闭的DataRead或者SqlConnection;
    2.检查是否同时打开太多SqlConnection;
    3.检查是否有循环查询次数过多的代码;
    4.数据量过多的多表查询不要用子查询,要用内连接,如果表结构不方便用内连接也要改了用内连接或外连接,因为子查询是单独又执行了一次select,所以假设有10000条结果的话,那么连上你的第一次查询+10000次子查询就等于连续查询了10001次,那样很耗费。总之LZ应该补一补Sql和Ado.Net的一些内部架构了,要不然只能开发一点数据量很小的小网站。
      

  14.   

    顺便补充一下
    private int getsmsgroupGS(int musid)
        {
            int gsnum = 0;
            string sql = "select gs from smsusr_group where id = " + musid;
            DataBase db = new DataBase();
            SqlDataReader dr = db.ExecuteReader(sql);
            if (dr.Read())
            {
                gsnum = Convert.ToInt32(dr["gs"].ToString().Trim());
            }
            return gsnum;
            dr.Close();
            db.Close();
        }看了下代码发现你这里就没有关闭任何连接,都已经return了后面的东西还会执行?恐怕不会了吧,按个调试你就知道了。
      

  15.   

    数据库连接的处理流程也不科学 比如下面
        private int getsmsgroupGS(int musid)
        {
            int gsnum = 0;
            string sql = "select gs from smsusr_group where id = " + musid;
            DataBase db = new DataBase();
            SqlDataReader dr = db.ExecuteReader(sql);
            if (dr.Read())
            {
                gsnum = Convert.ToInt32(dr["gs"].ToString().Trim());
            }
            return gsnum;
            dr.Close();
            db.Close();
        }
    如果没有成功读到数据 即if(!dr.Read()) 那后面的dr.Close()就会出错了 如果gsnum = Convert.ToInt32(dr["gs"].ToString().Trim())这句出错 程序就执行不到db.close() 又多出一个剩余请问这里要怎么改?
      

  16.   

    1、代码从头到尾没有一句代码注释,非常难懂。
    2、致命问题:从头到尾没有一处进行了容错处理,Try……Catch是干什么的?就是为了让程序出错时,不把代码直接赤裸裸的暴露在用户面前。如果这段代码是用来学习操作数据库的,还可以作为找错误的参考。但是如果是实际程序,我想问题会很多很多,基本上是卖不出去的
      

  17.   

    private int getsmsgroupGS(int musid)
        {
            int gsnum = 0;
            string sql = "select gs from smsusr_group where id = " + musid;
            DataBase db = new DataBase();
        try{
            SqlDataReader dr = db.ExecuteReader(sql);
            if (dr.Read())
            {
                gsnum = Convert.ToInt32(dr["gs"].ToString().Trim());
            }
            dr.Close();
            db.Close();
            return gsnum;
            }
          catch(exception e){
            //这里写容错的处理
           }
            
        }