请高手指点。我的页面如果在一分钟内刷新几次,有时数据库(SQL Server)的连接池会满500,一般也是几百?请问这是怎么回事?请帮我看看
下面是操作数据库的类::::::::::::::::::::
//Close--关闭数据库连接
private void Close()
{
if(myConnection.State==ConnectionState.Open)
{
myConnection.Close();
}
}
//Dispose--释放连接资源
public void Dispose()
{
Close();
myConnection.Dispose();
myConnection=null;
}
//CreateCommand--创建Command对象
private IDbCommand CreateCommand(string commandText)
{
Open();
IDbCommand dbCommand=null;
switch(databaseType)
{
case DatabaseTypes.OleDb:
dbCommand=new OleDbCommand(commandText,(OleDbConnection) myConnection);
break;
case DatabaseTypes.SQLServer:
dbCommand=new SqlCommand(commandText,(SqlConnection) myConnection);
break;
}
return dbCommand;
}
//GetDataAdapter
protected IDbDataAdapter GetDataAdapter(string commandText)
{
Open();
IDbDataAdapter dbDataAdapter=null;
switch(databaseType)
{
case DatabaseTypes.OleDb:
dbDataAdapter=new OleDbDataAdapter(commandText,(OleDbConnection)myConnection);
break;
case DatabaseTypes.SQLServer:
dbDataAdapter=new SqlDataAdapter(commandText,(SqlConnection)myConnection);
break;
}
return dbDataAdapter;
}
//ExecuteSQLReader--执行Sql语句。生成DataReader。
public OleDbDataReader ExecuteSQLReader(string selectCommandText)
{
IDbCommand dbCommand=CreateCommand(selectCommandText);
dbCommand.CommandType=CommandType.Text;
return (OleDbDataReader)dbCommand.ExecuteReader();
}
//ExecuteSQLNonQuery--执行SQL语句。
public void ExecuteSQLNonQuery(string selectCommandText)
{
IDbCommand dbCommand=CreateCommand(selectCommandText);
dbCommand.CommandType=CommandType.Text;
dbCommand.ExecuteNonQuery();
}
//GetDataRow--通过Sql语句获取一条记录。
public DataRow GetDataRow(string selectCommandText)
{
DataRow myDataRow=null;
IDbDataAdapter myDataAdapter=GetDataAdapter(selectCommandText);
DataSet myDataSet=new DataSet();
myDataAdapter.Fill(myDataSet);
if(myDataSet.Tables[0].Rows.Count>0)
{
myDataRow=myDataSet.Tables[0].Rows[0];
}
return myDataRow;
}
//GetDataTable--通过Sql语句获取一个表。mynameisldyandjrf
public DataTable GetDataTable(string selectCommandText)
{
IDbDataAdapter myDataAdapter=GetDataAdapter(selectCommandText);
DataSet myDataSet=new DataSet();
myDataAdapter.Fill(myDataSet);
return myDataSet.Tables[0];
}
****************************************************************************
下面是另一个类,我通过这个类设置了一些静态方法来引用数据里的类取得数据。
public class GetData
{
public GetData()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//返回DataTable
public static DataTable GetDataTable(string strSql)
{
try
{
return new DataBase().GetDataTable(strSql);
}
finally
{
new DataBase().Dispose();
}
}
//返回DataRow
public static DataRow GetDataRow(string strSql)
{
try
{
return new DataBase().GetDataRow(strSql);
}
finally
{
new DataBase().Dispose();
}
}
******************************************************************************
下面是在页面里的引用。
DataTable myTable=GetData.GetDataTable(SQLSelect);
StringBuilder tableValue=new StringBuilder();
tableValue.Append(" ");
if(myTable.Rows.Count>0)
{
for(int i=0;i<myTable.Rows.Count;i++)
{
tableValue.Append("<a href='ListPage.aspx?SortID=" + sortID + "&SubSortID=" + subSortID + "&EndSortID=" + myTable.Rows[i]["SortID"].ToString() + "'>" + myTable.Rows[i]["SortName"].ToString() + "</a> ");
}
labThirdSort.Text=tableValue.ToString();
}
else
{
labThirdSort.Text=FaceClass.GetNoRecordInfo();//获取没有记录信息时的提示。
}
谢谢!在加班弄。急呀!
问题点数:0、回复次数:15Top
1 楼linuxname1()回复于 2005-04-02 12:20:38 得分 0
就没有人帮帮我吗?Top
2 楼AllenTing(今天你GC了吗???)回复于 2005-04-02 12:23:26 得分 0
//返回DataTable
public static DataTable GetDataTable(string strSql)
{
try
{
return new DataBase().GetDataTable(strSql);
}
finally
{
new DataBase().Dispose();//怎么又new了一个database对象???这样的话,上面的database根本没有关闭
}
}
-------------------------------------------------------------------------->
//返回DataTable
public static DataTable GetDataTable(string strSql)
{
try
{
DataBase db = new DataBase();
return db.GetDataTable(strSql);
}
finally
{
db.Dispose();
}
}
以下类似修改。
Top
3 楼linuxname1()回复于 2005-04-02 12:30:09 得分 0
没人可以指点一二吗?急呀!Top
4 楼linuxname1()回复于 2005-04-02 12:34:51 得分 0
具体应该怎么调用呀?是不是在网页里面new 一下类。
有谁能给个类似的例子?
是不是上面的我的方法用了static的事而没有释放?Top
5 楼wangsaokui(无间道III(终极无间)C#MVP)回复于 2005-04-02 12:35:46 得分 0
如果是相同的用户(就是你connectionstring中设定的用户和口令)访问数据库,连接池的数量是不会增加的,我觉得是别的地方的问题,比如你这个数据库是否有其他的用途Top
6 楼wangsaokui(无间道III(终极无间)C#MVP)回复于 2005-04-02 12:38:30 得分 0
没有看到你的open()函数定义,ExecuteSQLReader和ExecuteSQLNonQuery完毕后你也没有close数据库连接Top
7 楼dongweicq()回复于 2005-04-02 12:58:08 得分 0
禁止刷新Top
8 楼linuxname1()回复于 2005-04-02 16:07:22 得分 0
如果要关闭数据库的连接,应该在什么时候关闭比较合适。Top
9 楼skytear()回复于 2005-04-02 16:16:28 得分 0
数据库连接的实用原则,尽可能晚的打开,并尽可能早的关闭。Top
10 楼lovelxj(伊斯人,吾谁与归)回复于 2005-04-02 16:19:04 得分 0
逐步调试 看你进行到哪一步的时候 数据库忙起来的Top
11 楼syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)回复于 2005-04-02 16:50:37 得分 0
ExecuteSQLReader和ExecuteSQLNonQuery完毕后你没有close数据库连接
如果你要这么写类的话建议你用using,学Sqlhelper那样。
不过还是建议尽可能晚的打开,并尽可能早的关闭。
Top
12 楼napsoft(乡下人)回复于 2005-04-02 16:54:25 得分 0
打开SQL Server 企业管理器->性能Top
13 楼niunj(南航牛)回复于 2005-04-02 22:54:25 得分 0
一般默认的是100连接池
数据库连接是非常宝贵的资源 一定要经可能迟的打开 尽可能早的关闭Top
14 楼laojievip(小人物)回复于 2005-04-03 09:09:22 得分 0
收藏Top
15 楼wen3062(鼓手)回复于 2005-04-03 09:46:26 得分 0
应该是数据库打开后没有关闭哦,
很多操作都没有关闭.Top




