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

初学asp.net,一个数据库连接的方法?(急)

楼主fivehun2005(弱弱)2005-06-01 10:26:17 在 .NET技术 / ASP.NET 提问

小弟初学asp.net,之前一直在用asp,看了几本书后,发现在进行表操作时总是需要进行数据库的连接,这样不是浪费吗?听说连接池可以解决上述问题,可不知如何写?望能提供源码参考,谢谢!或有其它方法也好。 问题点数:0、回复次数:7Top

1 楼lr2651(戎 The Two Towers)回复于 2005-06-01 10:51:07 得分 0

///   <summary>  
  ///   建立数据库连接。  
  ///   </summary>  
  public   void   Open()  
  {  
  if   (conn   ==   null)  
  {  
  conn   =   new   OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);  
  conn.Open();  
  }  
  }  
  建立这么个公有事件,放到一个类文件中,每次直接调用   Open();就可以了。Top

2 楼Nils(睡瞌睡等机会)回复于 2005-06-01 11:21:30 得分 0

池连接可以显著提高应用程序的性能和可缩放性。SQL   Server   .NET   数据提供程序提供了自动为您的   ADO.NET   客户端应用程序管理连接池的功能。您也可以提供几个连接字符串修饰符来控制连接池行为(请参阅本主题后面部分的“使用连接字符串关键字控制连接池”)。  
   
  池的创建和分配  
  当连接打开时,将根据一种精确的匹配算法来创建连接池,该算法会使连接池与连接中的字符串相关联。每个连接池都与一个不同的连接字符串相关联。当新连接打开时,如果连接字符串不精确匹配现有池,则将创建一个新池。  
   
  在以下示例中,将创建三个新的   SqlConnection   对象,但只需要使用两个连接池来管理这些对象。请注意,第一个和第二个连接字符串的差异在于为   Initial   Catalog   分配的值。  
   
  SqlConnection   conn   =   new   SqlConnection();  
  conn.ConnectionString   =   "Integrated   Security=SSPI;Initial   Catalog=northwind";  
  conn.Open();              
  //   Pool   A   is   created.  
   
  SqlConnection   conn   =   new   SqlConnection();  
  conn.ConnectionString   =   "Integrated   Security=SSPI;Initial   Catalog=pubs";  
  conn.Open();              
  //   Pool   B   is   created   because   the   connection   strings   differ.  
   
  SqlConnection   conn   =   new   SqlConnection();  
  conn.ConnectionString   =   "Integrated   Security=SSPI;Initial   Catalog=northwind";  
  conn.Open();              
  //   The   connection   string   matches   pool   A.  
  连接池一旦创建,直到活动进程终止时才会被毁坏。非活动或空池的维护只需要最少的系统开销。  
   
  连接的添加  
  连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到最大池大小。  
   
  当请求   SqlConnection   对象时,如果存在可用的连接,则将从池中获取该对象。若要成为可用连接,该连接当前必须未被使用,具有匹配的事务上下文或者不与任何事务上下文相关联,并且具有与服务器的有效链接。  
   
  如果已达到最大池大小且不存在可用的连接,则该请求将会排队。当连接被释放回池中时,对象池管理程序将重新分配连接,以满足这些请求。如果在可获取连接对象之前超时期限已过(由   Connect   Timeout   连接字符串属性来决定),则将出错。  
   
  警告   每次使用完   Connection   后都必须将其关闭。这可以使用   Connection   对象的   Close   或   Dispose   方法来实现。未显式关闭的连接将不会添加或返回到池中。  
  连接的移除  
  如果连接生存期已过或者池管理程序检测到与服务器的连接已被断开,则对象池管理程序将从池中移除该连接。请注意,只有在尝试与服务器进行通讯后,才可以检测到这种情况。如果发现某连接不再连接到服务器,则会将其标记为无效。对象池管理程序会定期扫描连接池,以查找已被释放到池中并标记为无效的对象。找到后,这些连接将被永久移除。  
   
  如果与已消失的服务器的连接还存在,那么即使对象池管理程序未检测到断开的连接并将其标记为无效,仍有可能将此连接从池中取出。当发生这种情况时,将生成异常。但是,为了将该连接释放回池中,仍必须将其关闭。  
   
  事务支持  
  连接是根据事务上下文来从池中取出并进行分配的。请求线程和所分配的连接的上下文必须匹配。因此,每个连接池实际上又分为不具有关联事务上下文的连接以及   N   个各自包含与一个特定事务上下文的连接的子部分。  
   
  当连接关闭时,它将被释放回池中,并根据其事务上下文放入相应的子部分。因此,即使分布式事务仍然挂起,仍可以关闭该连接而不会生成错误。这样,您就可以在随后提交或中止分布式事务。  
   
  使用连接字符串关键字控制连接池  
  SQLConnection   对象的   ConnectionString   属性支持连接字符串键/值对,这些键/值对可用于调整连接池逻辑的行为。  
   
  下表描述了可用于调整连接池行为的   ConnectionString   值。  
   
  名称   默认值   说明    
  Connection   Lifetime   0   当连接返回到池中时,将对它的创建时间和当前时间进行比较,如果时间间隔超过由   Connection   Lifetime   指定的值(以秒为单位),则会毁坏该连接。在聚集配置中可以使用它来强制在运行服务器和刚联机的服务器之间达到负载平衡。    
  如果值为零   (0),则将使池连接具有最大的超时期限。  
     
  Connection   Reset   'true'   确定在从池中移除数据库连接时是否将其重置。对于   Microsoft   SQL   Server   版本   7.0,如果设置为   false,将避免在获取连接时经历一个额外的往返行程,但必须注意的是连接状态(如数据库上下文)不会被重置。    
  Enlist   'true'   当为   true   时,如果存在事务上下文,池管理程序将自动在创建线程的当前事务上下文中登记连接。    
  Max   Pool   Size   100   池中允许的最大连接数。    
  Min   Pool   Size   0   池中维护的最小连接数。    
  Pooling   'true'   当为   true   时,将从相应的池中取出连接,或者在必要时创建连接并将其添加到相应的池中。    
   
  连接池的性能计数器  
  SQL   Server   .NET   数据提供程序添加了几个性能计数器,它们将使您能够微调连接池特性,检测与失败的连接尝试相关的间歇性问题,并检测与对   SQL   Server   的超时请求相关的问题。  
   
  下表列出了可以在“.NET   CLR   数据”性能对象下的“性能监视器”中访问的连接池计数器。  
   
  计数器   说明    
  SqlClient:当前池连接和非池连接的数目   当前池连接或非池连接的数目。    
  SqlClient:当前池连接的数目   当前所有池中与特定进程关联的连接的数目。    
  SqlClient:当前连接池的数目   当前与特定进程关联的池的数目。    
  SqlClient:池连接数的峰值   自特定进程开始以来所有池中的连接数峰值。请注意:此计数器只有在与特定进程实例关联时才可用。_Global   实例始终返回   0。    
  SqlClient:失败连接的总数   打开连接的尝试因任何原因而失败的总次数。Top

3 楼dcren118(酒仙)回复于 2005-06-01 11:28:38 得分 0

数据库连接   用完了马上就要关闭!  
   
  这样   才是最优化的方法!  
   
  Top

4 楼dragonwzw(龙的传人)回复于 2005-06-01 11:31:28 得分 0

连接Oracle数据库  
   
  using   System.Data.OracleClient;  
  .....  
   
  string   strConn="Data   Source=webdb;User   Id=shendun;Password=za887nimdawzwmgf1dsd;";  
  OracleConnection   conn=new   OracleConnection(strConn);  
  conn.open();Top

5 楼meixiaofeng(yesmsn)回复于 2005-06-01 11:47:44 得分 0

自带Top

6 楼50277(柳影随风)回复于 2005-06-01 13:05:57 得分 0

///   <summary>  
  ///   得到DataTable对象  
  ///   </summary>  
  ///   <param   name="strSql">SQL语句</param>  
  ///   <returns>DataTable</returns>  
  public   DataTable   GetDataTable(string   strSql)  
  {  
  GPRS.GPRSConfig.GPRSConfig   config=new   GPRS.GPRSConfig.GPRSConfig();  
  SqlConnection   Cnn=null;  
  SqlCommand   command=null;  
  SqlDataAdapter   dataA=new   SqlDataAdapter();  
  DataSet   data=new   DataSet();  
  try  
  {  
  Cnn=new   SqlConnection(config.getConnectionString());  
  if   (Cnn.State   !=ConnectionState.Open)  
  {  
  Cnn.Open();  
  }  
  command=new   SqlCommand(strSql,Cnn);  
  command.CommandType   =CommandType.Text;  
  dataA.SelectCommand   =command;  
  dataA.Fill(data);  
  return   data.Tables[0];  
  }  
  catch   (Exception   e)  
  {    
  throw   e;  
  }  
  finally  
  {  
  try  
  {  
  dataA.Dispose();  
  command.Dispose();  
  Cnn.Close();  
  Cnn.Dispose();  
  Cnn=null;  
  }  
  catch  
  {}  
  }  
  }  
   
  ////////////////////////////////////////////////////////////////////////////////  
   
  ///   <summary>  
  ///   得到数据库连接字符串  
  ///   </summary>  
  ///   <returns>返回数据库连接字符串</returns>  
  private   string   getXMLString(int   connetionSign)  
  {  
  DataSet   dataset=new   DataSet();  
  DataTable   tab=new   DataTable();  
  string   CNNstring="";  
  //string   path=System.Environment.CurrentDirectory;  
  string   dbName="";  
  if   (System.Web.HttpContext.Current.Session["GPRSDataBaseName"]!=null)  
  {  
  dbName=System.Web.HttpContext.Current.Session["GPRSDataBaseName"].ToString();  
  }  
  string   path=System.Web.HttpContext.Current.Request.PhysicalApplicationPath;  
  path+="config\\datasource.xml";  
  dataset.ReadXml(path);  
  DataRow   row=dataset.Tables[0].Rows[0];  
  CNNstring="server="+row["server"].ToString()+";";  
  CNNstring+="User   ID="+row["user"].ToString()+";";  
  CNNstring+="Password="+row["password"].ToString()+";";  
  if   (connetionSign==0)//默认链接  
  {  
  CNNstring+="database="+row["database"].ToString()+";Connection   Reset=FALSE";  
  }  
  else  
  {  
  if   (dbName!="")  
  {  
  CNNstring+="database="+dbName+";Connection   Reset=FALSE";  
  }  
  else  
  {  
  CNNstring+="database="+row["database"].ToString()+";Connection   Reset=FALSE";  
  }  
  }  
  dataset.Dispose();  
  dataset=null;  
  dbConnectionString=CNNstring;  
  return   CNNstring;  
  }  
  ///////////////////////////////////////////////////////////////////////////////////  
  XML文件的内容     datasource.xml     放在自己的config文件夹里  
  <?xml   version="1.0"   standalone="yes"?>  
  <JY_GPRS>  
      <server>数据库地址</server>  
      <database>数据库名称</database>  
      <user>用户名</user>  
      <password>密码</password>  
      <connectiontimeout>10</connectiontimeout>  
      <connectionlifetime>10</connectionlifetime>  
      <maxpoolsize>200</maxpoolsize>  
      <minpoolsize>20</minpoolsize>  
      <pooling>true</pooling>  
      <currentDataBase>数据库名称</currentDataBase>  
  </JY_GPRS>  
  ///////////////////////////////////////////////////  
   
   
  string   strSql="select   *   from     youTable";  
  DataGrid.DataSource=GetDataTable(strSql);  
  DataGrid.DataBind();  
  ///////////////////////////////////////////Top

7 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-01 13:10:10 得分 0

连接池,只要你有打开数据库连接,系统就会自动将你的请求暂存在连接池里面,如果在一定时间里面,还有人一请求相同的连接,那么它就直接复用,因此速度快,并不是说有什么直接使用连接池的方法.  
  你只要在需要的时候,才打开数据库,而在使用完毕时,立即关闭数据库,就可以了.Top

相关问题

  • 初学ASP。NET,散分,怎样记录访问者的IP到数据库?
  • ★★★初学ASP,提几个数据库操作的问题★★★
  • 初学ASP。NET
  • 高手帮忙!我初学.net,关于数据库的!
  • 初学ASP,连数据库SQLSERVER7,报未找到ADO对象。急救!
  • 我是一个初学者,请问ASP怎样连接到SQL数据库?
  • 初学ASP和数据库,小弟请教一个问题,感谢赐教
  • 初学asp,求助大家一个连接数据库的问题
  • 初学asp,连接数据库出问题,请各位帮忙解决
  • asp 数据库

关键词

  • .net
  • asp.net
  • 连接
  • 数据库
  • 计数器
  • 服务器
  • 字符串
  • cnnstring
  • 事务上下文
  • 对象

得分解答快速导航

  • 帖主:fivehun2005

相关链接

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

广告也精彩

反馈

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