问题描述
小弟最近用asp.net+sqlserver作了个东西,数据操作一律用存储过程来完成,我调试起来一开始一切正常,但是用着用着就会出现以下这个错误:超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.InvalidOperationException:超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。源错误:行24:SqlConnection1=newSqlConnection();行25:SqlConnection1.ConnectionString=ConfigurationSettings.AppSettings["Conn"];行26:SqlConnection1.Open();行27:}行28:是不是我的数据库连接很多没有关闭的关系,以下贴出我的数据层基类,数据库操作全用这个类来完成的,有些连接不是我不想关,是偶水平菜不知道怎么去关,CSDN的高人们指点下我吧..Dalsqldal.cs类:publicclasssqldal{publicSqlConnectionSqlConnection1;publicSqlCommandSqlCommand1;publicSqlDataAdapterSqlDataAdapter1;publicSqlTransactionSqlTransaction1;publicSqlDataReaderSqlDataReader1;publicDataSetDataSet1;publicDataTableDataTable1;publicDataRowDataRow1;publicvoidConnOpen(){SqlConnection1=newSqlConnection();SqlConnection1.ConnectionString=ConfigurationSettings.AppSettings["Conn"];SqlConnection1.Open();}publicvoidConnClose(){if(SqlConnection1!=null){SqlConnection1.Close();}}publicDataTablespExecuteTable(stringsp,SqlParameter[]parms){ConnOpen();SqlCommand1=newSqlCommand(sp,SqlConnection1);SqlCommand1.CommandType=CommandType.StoredProcedure;if(parms!=null){SqlParameter[]parmsArray=parms;for(intnum=0;num<parmsArray.Length;num++){SqlParameterparm=parmsArray[num];SqlCommand1.Parameters.Add(parm);}}SqlDataAdapter1=newSqlDataAdapter();SqlDataAdapter1.SelectCommand=SqlCommand1;DataSet1=newDataSet();SqlDataAdapter1.Fill(DataSet1);DataTable1=DataSet1.Tables[0];returnDataTable1;}publicvoidspExecuteNonQuery(stringsp,SqlParameter[]parms){ConnOpen();SqlTransaction1=SqlConnection1.BeginTransaction();SqlCommand1=newSqlCommand(sp,SqlConnection1,SqlTransaction1);SqlCommand1.CommandType=CommandType.StoredProcedure;if(parms!=null){SqlParameter[]parmsArray=parms;for(intnum=0;num<parmsArray.Length;num++){SqlParameterparm=parmsArray[num];SqlCommand1.Parameters.Add(parm);}}try{SqlCommand1.ExecuteNonQuery();SqlTransaction1.Commit();}catch(Exceptionex){SqlTransaction1.Rollback();throw;}finally{ConnClose();}}publicstringspExecuteScalar(stringsp,SqlParameter[]parms){ConnOpen();SqlCommand1=newSqlCommand(sp,SqlConnection1);SqlCommand1.CommandType=CommandType.StoredProcedure;if(parms!=null){SqlParameter[]parmsArray=parms;for(intnum=0;num<parmsArray.Length;num++){SqlParameterparm=parmsArray[num];SqlCommand1.Parameters.Add(parm);}}objectobj=SqlCommand1.ExecuteScalar();if(obj==null){return"";}else{returnobj.ToString();}}publicSqlDataReaderspExcuteReader(stringsp,SqlParameter[]parms){ConnOpen();SqlCommand1=newSqlCommand(sp,SqlConnection1);SqlCommand1.CommandType=CommandType.StoredProcedure;if(parms!=null){SqlParameter[]parmsArray=parms;for(intnum=0;num<parmsArray.Length;num++){SqlParameterparm=parmsArray[num];SqlCommand1.Parameters.Add(parm);}}SqlDataReader1=SqlCommand1.ExecuteReader(CommandBehavior.CloseConnection);returnSqlDataReader1;}}像返回datatable这种,我不知道怎么去关,关了返回好像会出错,关不了..程序出现这种错误是什么原因啊?是不是我连接很多没关?还什么别的原因?
解决方案
解决方案二:
神啊..救救我吧..
解决方案三:
神是不会来救你的呵呵:看看这个:///<summary>///查询,返回DataSet结果集///</summary>///<paramname="vSQLStatement">查询的sql语句</param>///<paramname="vTableName">DataSet中的数据表名称</param>///<returns>DataSet形式的查询结果</returns>publicDataSetGetDataSet(stringvSQLStatement,stringvTableName){strDSN=GetConnectString();SqlConnectiondbConnection=newSqlConnection(strDSN);DataSetmyDataSet=newDataSet();strErr="";try{dbConnection.Open();SqlDataAdaptermyAdapter=newSqlDataAdapter(vSQLStatement,dbConnection);myAdapter.Fill(myDataSet,vTableName);}catch(ExceptionobjErr){strErr="[ErrSource:]"+objErr.Source+"[ErrDescription:]"+objErr.Message;}dbConnection.Close();returnmyDataSet;}
解决方案四:
spExecuteScalar,spExcuteReader没关连接一定要在finally里面关连接
解决方案五:
楼上的reader好像不能关的,关了返回去的dr就不能用了,我用SqlDataReader1=SqlCommand1.ExecuteReader(CommandBehavior.CloseConnection);这个来关的..应该也行的吧??
解决方案六:
我给spExecuteScalar,spExecuteDataTable也加上connclose了,但是还是出这个错误...怎么回事啊...
解决方案七:
不是吧!默认的连接池好象是100个连接,你都能满啊?....
解决方案八:
我承认..我自已是猪.....SqlDataReader1=SqlCommand1.ExecuteReader(CommandBehavior.CloseConnection);这句要datareader.close时相应的conn才会自动去关闭..我在事务层里一个dr都没close..我是猪..都dr.close()一下就一切正常了..以前我都没注意去关连接,现在作了稍大点的东西竟然发生这种错误,不过以后知道了,要及时关了..
解决方案九:
birdwings(SuperCai)()信誉:1002007-09-0312:03:10得分:0楼上的reader好像不能关的,关了返回去的dr就不能用了,我用SqlDataReader1=SqlCommand1.ExecuteReader(CommandBehavior.CloseConnection);这个来关的..应该也行的吧??=====================================是不能关的datereader是连数据库读的不像datatable可以短开连接