.NET超级问题~ 连接池和存储过程及类调用和母版页集合问题~~~

问题描述

最近做一个网站,遇到下面问题,2-3台机器打开后,sql里面的连接数爆满~错误信息:----------------------超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。----------------------使用了母版页,都是使用的存储过程,没有一个sql语句.大约7-8个页面使用同一个母版页,母版页很简单,头-中-下都是空的.左边是一个datalist显示下面样式的信息:-----------------------------商标列表第一类(50个)第二类(90个)........共45条-----------------------------基础链接类:引用下面的方法绑定到datalist上面,它调用一个存储过程:BrandTypeList_Count------------------------------------------------------------------privatevoidBindDataLast(){DataSetds=sql.RunProcedure("BrandTypeList_Count","BrandTypeList_Count");Dl_Brand_Type.DataSource=ds;Dl_Brand_Type.DataBind();if(ds.Tables[0].Rows.Count>0){for(inti=0;i<ds.Tables[0].Rows.Count;i++){HyperLinkhy=(HyperLink)Dl_Brand_Type.Items[i].FindControl("hl_title");Labellab_num=(Label)Dl_Brand_Type.Items[i].FindControl("lab_num");lab_num.Text="["+ds.Tables[0].Rows[i]["BrandCount"].ToString()+"]";hy.Text=ds.Tables[0].Rows[i]["type_names"].ToString();hy.ToolTip=ds.Tables[0].Rows[i]["type_depict"].ToString();hy.NavigateUrl="~/Brand/Brand_List.aspx?TypeId="+ds.Tables[0].Rows[i]["type_value"].ToString();hy.Style.Value="font-size:9pt";}}}-------------------------------------------------------------存储过程:BrandTypeList_Count-----------------------CREATEPROCEDUREdbo.BrandTypeList_Count/*(@parameter1int=5,@parameter2datatypeOUTPUT)*/AS/*SETNOCOUNTON*/SELECTBrandtype.type_names,Brandtype.type_value,COUNT(Brand.brand_id)ASBrandCount,Brandtype.type_depictFROMBrandINNERJOINBrandtypeONBrand.brand_cognizance=Brandtype.type_valueGROUPBYBrandtype.type_names,Brandtype.type_value,Brandtype.type_depictORDERBYBrandtype.type_valueRETURNGO----------------------------------------------------------

解决方案

解决方案二:
执行存储过程和数据库连接类usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Web;namespaceSuperMan{///<summary>///操作数据库///</summary>publicclassSqlHelper{privateSqlConnectionConn=newSqlConnection();privateSqlCommandCom=null;//protectedconststringDbServer=".";//服务器名//protectedconststringDbName="CMSB_CMS";//数据库名//protectedconststringDbUser="sa";//用户名//protectedconststringDbPwd="sa";//密码//protectedconststringDBConnStr=@"Server="+DbServer+""+";"+"InitialCatalog="+DbName+""+";"+"UserId="+DbUser+""+";"+"Password="+DbPwd+";";//使用web。config文件的数据库配置protectedstringDBConnStr=System.Configuration.ConfigurationManager.AppSettings["sql_conn"].ToString();publicSqlHelper(){CreatConn();}///<summary>///建立数据库链接///</summary>///<paramname="ConStr">数据连接字符串</param>publicvoidCreatConn(){try{Conn.ConnectionString=DBConnStr;}catch(Exceptione){thrownewException(e.Message);}finally{Conn.Open();}}///<summary>///打开数据库链接///</summary>protectedvoidConnOpen(){if(Conn.State==ConnectionState.Closed){Conn.Open();}}///<summary>///释放数据库连接///</summary>publicvoidDispose(){if(Conn!=null){if(Conn.State==ConnectionState.Open){Conn.Close();}}Conn.Dispose();if(Com!=null){Com.Dispose();}}///<summary>///返回数据库连接字符串///</summary>///<returns></returns>publicstringGetConStr(){returnDBConnStr;}#region操作储存过程///<summary>///执行命令(带返回值)///</summary>///<paramname="SqlStr"></param>///<returns></returns>publicobjectExecuteScalar(stringstoredProcName,IDataParameter[]parameters){objecti;try{ConnOpen();SqlCommandcommand=newSqlCommand(storedProcName,Conn);command.CommandType=CommandType.StoredProcedure;foreach(SqlParameterparameterinparameters){command.Parameters.Add(parameter);}i=command.ExecuteScalar();}catch(Exceptione){thrownewException(e.Message);}finally{Conn.Close();Com=null;}returni;}///<summary>///创建SqlCommand对象实例(用来返回一个整数值)///</summary>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>///<returns>SqlCommand对象实例</returns>publicSqlCommandBuildIntCommand(stringstoredProcName,IDataParameter[]parameters){SqlCommandcommand=BuildQueryCommand(storedProcName,parameters);command.Parameters.Add(newSqlParameter("ReturnValue",SqlDbType.Int,4,/*Size*/ParameterDirection.ReturnValue,false,/*isnullable*/0,/*byteprecision*/0,/*bytescale*/string.Empty,DataRowVersion.Default,null));returncommand;}
解决方案三:
///<summary>///构建SqlCommand对象(用来返回一个结果集,而不是一个整数值)///</summary>///<paramname="connection">数据库连接</param>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>///<returns>SqlCommand</returns>publicSqlCommandBuildQueryCommand(stringstoredProcName,IDataParameter[]parameters){SqlCommandcommand=newSqlCommand(storedProcName,Conn);command.CommandType=CommandType.StoredProcedure;foreach(SqlParameterparameterinparameters){command.Parameters.Add(parameter);}returncommand;}///<summary>///执行存储过程,返回影响的行数///</summary>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>///<paramname="rowsAffected">影响的行数</param>///<returns></returns>publicintRunProcedure(stringstoredProcName,IDataParameter[]parameters,outintrowsAffected){intresult;ConnOpen();SqlCommandcommand=BuildIntCommand(storedProcName,parameters);rowsAffected=command.ExecuteNonQuery();result=(int)command.Parameters["ReturnValue"].Value;command.Dispose();Conn.Close();returnresult;}///<summary>///执行存储过程///</summary>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>///<returns>SqlDataReader</returns>publicSqlDataReaderRunProcedure(stringstoredProcName,IDataParameter[]parameters){SqlDataReaderrd;ConnOpen();SqlCommandcommand=BuildQueryCommand(storedProcName,parameters);command.CommandType=CommandType.StoredProcedure;rd=command.ExecuteReader();command.Dispose();Conn.Close();Conn.Dispose();returnrd;}///<summary>///执行存储过程,返回DATASET///</summary>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>///<paramname="tableName">DataSet结果中的表名</param>///<returns>DataSet</returns>publicDataSetRunProcedure(stringstoredProcName,stringtableName){ConnOpen();DataSetdataSet=newDataSet();SqlDataAdaptersqlDA=newSqlDataAdapter(storedProcName,Conn);sqlDA.Fill(dataSet,tableName);sqlDA.Dispose();Conn.Close();Conn.Dispose();returndataSet;}///<summary>///执行存储过程,以DataSet返回数据集///</summary>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>///<paramname="tableName">DataSet结果中的表名</param>///<returns>DataSet</returns>publicDataSetRunProcedure(stringstoredProcName,IDataParameter[]parameters,stringtableName){DataSetdataSet=newDataSet();ConnOpen();SqlDataAdaptersqlDA=newSqlDataAdapter();sqlDA.SelectCommand=BuildQueryCommand(storedProcName,parameters);sqlDA.Fill(dataSet,tableName);sqlDA.Dispose();Conn.Close();Conn.Dispose();returndataSet;}///<summary>///执行存储过程(将数集填充至dataSet并返回)///</summary>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>///<paramname="dataSet">DataSet名</param>///<paramname="tableName">DataSet结果中的表名</param>publicvoidRunProcedure(stringstoredProcName,IDataParameter[]parameters,DataSetdataSet,stringtableName){ConnOpen();SqlDataAdaptersqlDA=newSqlDataAdapter();sqlDA.SelectCommand=BuildIntCommand(storedProcName,parameters);sqlDA.Fill(dataSet,tableName);sqlDA.Dispose();Conn.Close();Conn.Dispose();}///<summary>///执行存储过程(无返回值)///</summary>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>publicvoidRunComProcedure(stringstoredProcName,IDataParameter[]parameters){ConnOpen();SqlCommandcommand=BuildQueryCommand(storedProcName,parameters);command.CommandType=CommandType.StoredProcedure;command.ExecuteNonQuery();command.Dispose();Conn.Close();}///<summary>///执行存储过程,以DataTable返回数据集///</summary>///<paramname="storedProcName"></param>///<paramname="parameters"></param>///<paramname="tableName"></param>///<returns></returns>publicDataTableGetTable(stringstoredProcName,IDataParameter[]parameters,stringtableName){DataSetds=newDataSet();ConnOpen();SqlDataAdapterad=newSqlDataAdapter();ad.SelectCommand=BuildQueryCommand(storedProcName,parameters);Conn.Close();if(ad!=null){ad.Fill(ds,tableName);ad.Dispose();Conn.Close();if(ds.Tables[tableName].DefaultView.Count>0)returnds.Tables[tableName];elsereturnnull;}else{ds.Dispose();ad.Dispose();Conn.Close();returnnull;}}///<summary>///执行存储过程,返回TABLE///</summary>///<paramname="storedProcName">存储过程名</param>///<paramname="parameters">存储过程参数</param>///<paramname="tableName">DataSet结果中的表名</param>///<returns>DataSet</returns>publicDataTableGetTableProcedure(stringstoredProcName,stringtableName){ConnOpen();DataSetdataSet=newDataSet();SqlDataAdaptersqlDA=newSqlDataAdapter(storedProcName,Conn);sqlDA.Fill(dataSet,tableName);sqlDA.Dispose();Conn.Close();Conn.Dispose();returndataSet.Tables[tableName];}----------------------------------Conn.Close();都加上<appSettings><addkey="sql_conn"value="datasource=.;uid=sa;pwd=sa;database=CMSB_CMS;pooling=true"></add></appSettings>---------------------------------设置.不知道是使用母版页的问题,还是存储过程的问题.还是连接的问题头大了高手支招啊
解决方案四:
没人?
解决方案五:
不知道,顶!
解决方案六:
大家帮忙啊!!!!所有线程,那个存储过程最多,它是母版页内的datalist的
解决方案七:
jijiji~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
解决方案八:
用了母版页的页面刷新一次数据库中就多一个线程还是执行那个存储过程晕~~~~~~~

时间: 2024-09-18 18:12:44

.NET超级问题~ 连接池和存储过程及类调用和母版页集合问题~~~的相关文章

用连接池提高Servlet访问数据库的效率 (-)

servlet|访问|数据|数据库 Java Servlet作为首选的服务器端数据处理技术,正在迅速取代CGI脚本.Servlet超越CGI的优势之一在于,不仅多个请求可以共享公用资源,而且还可以在不同用户请求之间保留持续数据.本文介绍一种充分发挥该特色的实用技术,即数据库连接池. 一.实现连接池的意义 动态Web站点往往用数据库存储的信息生成Web页面,每一个页面请求导致一次数据库访问.连接数据库不仅要开销一定的通讯和内存资源,还必须完成用户验证.安全上下文配置这类任务,因而往往成为最为耗时的

虚拟主机上,hibernate的连接池如何配置

问题描述 有这方面经验的,希望能指导一下,最好能给出C3PO的配置,或者proxool的配置,如果能解决,分数全部奉上,谢谢:下面的配置不行,而且修改了几个类似参数也不行,最好能说明原因<!-- 最大连接数 --><property name="hibernate.c3p0.max_size">20</property><!-- 最小连接数 --><property name="hibernate.c3p0.min_siz

spring学习笔记(17)数据库配置[1]spring数据连接池详解

数据连接池 在spring中,常使用数据库连接池来完成对数据库的连接配置,类似于线程池的定义,数据库连接池就是维护有一定数量数据库连接的一个缓冲池,一方面,能够即取即用,免去初始化的时间,另一方面,用完的数据连接会归还到连接池中,这样就免去了不必要的连接创建.销毁工作,提升了性能.当然,使用连接池,有一下几点是连接池配置所考虑到的,也属于配置连接池的优点,而这些也会我们后面的实例配置中体现: 1. 如果没有任何一个用户使用连接,那么那么应该维持一定数量的连接,等待用户使用. 2. 如果连接已经满

急求帮忙:SSH 使用 proxool 连接池的 报错问题。谢谢了。

问题描述 问题报错的log是:[14:51:11.774] javax.servlet.ServletException: org.springframework.orm.hibernate3.HibernateSystemException: connnection proxy not usable after transaction completion; nested exception is org.hibernate.HibernateException: connnection pr

DBCP、C3P0、Proxool 、 BoneCP开源连接池的比较(完全转载)

本文章完全为转载内容. 转载地址:http://blog.csdn.net/july_2/article/details/18843419 转载的原因是,好好的一篇文章,他 给复制了N编.    简介   使用评价  项目主页  DBCP DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用 可以设置最大和最小连接,连接等待时间等,基本功能都有,此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性有所下降,此

HttpClient连接池原理及一次连接时序图

1.       httpClient介绍 HttpClient是一个实现了http协议的开源Java客户端工具库,可以通过程序发送http请求.   1.1.  HttpClient发送请求和接收响应 1.1.1.      代码示例 以Get请求为例,以下代码获得google主页内容并将返回结果打印出来. public final static void main(String[] args) throws Exception {           HttpClient httpclien

连接池满-在界面上连续按F5刷新Tomcat报错,显示连接池已满

问题描述 在界面上连续按F5刷新Tomcat报错,显示连接池已满 错误信息:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection pool error Timeout waiting for idle objectTomcat与数据库使用连接池,封装在一个类里面:public class BaseDAO { private Connection conn = null;private ResultSet r

ADO.NET之连接池技术的使用详解_实用技巧

连接到数据库服务器通常需要一定的时间,且服务器也需要一定的资源来处理连接.Web应用程序有时处理成千上万的连接,需要相当多的资源来处理连接.ADO.NET具有连接池的特性,连接池的功能是保留一定数量的连接,当用户使用相同的连接字符串再次连接服务器时,ASO.NET将使用连接池中的连接而不用重新发起一次连接过程.当调用Close方法关闭连接时,ADO.NET将使用连接池中的连接而不用重新发起一次连接过程.当调用Close方法关闭连接时,连接将会返回到连接池中,下次再次调用Open方法时,将从连接池

使用Spring管理数据源连接池

问题描述 不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的.在以往的应用中,数据源一般是Web应用服务器提供的.在Spring中,你不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源,此外,你还可以通过代码的方式创建一个数据源,以便进行无依赖的单元测试.配置一个数据源Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是C3P0.在此重点讲讲C3P0的配置:此后会更新DBCP