CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

请高手指点。我的页面如果在一分钟内刷新几次,有时数据库(SQL Server)的连接池会满500,一般也是几百?请问这是怎么回事?请帮我看看

楼主linuxname1()2005-04-02 12:07:58 在 .NET技术 / ASP.NET 提问

下面是操作数据库的类::::::::::::::::::::  
  //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>&nbsp;&nbsp;&nbsp;&nbsp;");  
  }  
  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

相关问题

  • 这个SQL语句是怎么回事?
  • 这个SQL问题怎么回事?
  • OpenGL大侠请指点,这个错误是怎么回事
  • 急待大虾指点:java做erp是怎么回事?
  • 急待大虾指点:java做erp是怎么回事?
  • 请高手指点,如下错误是怎么回事?
  • VC6的workspace窗口不刷新是怎么回事?
  • 页面没有刷新是怎么回事呀?
  • 发帖后需要手动刷新,怎么回事
  • adodc刷新数据总是少一条,怎么回事

关键词

  • 数据库
  • 连接
  • 语句
  • database
  • dbcommand
  • getdatatable
  • selectcommandtext
  • getdatarow
  • mydataset
  • datatablepublic

得分解答快速导航

  • 帖主:linuxname1

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo