温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#数据库连接池的创建

发布时间:2021-07-15 15:07:13 来源:亿速云 阅读:222 作者:chen 栏目:编程语言

本篇内容主要讲解“C#数据库连接池的创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#数据库连接池的创建”吧!

使用C#数据库连接池

连接到数据库服务器通常由几个需要软长时间的步骤组成。必须建立物理通道(例如套接字或命名管道),必须与服务器进行初次连接,必须分析连接字符串信息,必须由服务器对连接进行身份验证,等等。

实际上,大部份的应用程序都是使用一个或几个不同的连接配置。当应用程序的数据量和访问量大的时候,这意味着在运行应用程序的过程中,许多相同的连接将反复地被打开和关闭,从而会引起数据库服务器效率低下甚至引发程序崩溃。为了确保应用程序的稳定和降低性能成本,我们可以在ADO.NET中使用称为连接池的优化方法来管理维护连接。

C#数据库连接池可以减少创建连接的次数。定义最小连接数(固定连接数),当用户在连接上调用Open,连接池就会检查池中是否有可用的连接。如果发现有连接可用,会将该连接返回给调用者,而不是创建新连接。应用程序在该连接上调用Close时,连接池会判断该连接是否在最小连接数之内,如果“是”会将连接回收到活动连接池中而不是真正关闭连接,否则将烧毁连接。连接返回到池中之后,即可在下一个Open调用中重复使用。

创建C#数据库连接池

以下示例使用C#连接SQL数据库:

classDbConn  {  //usingSystem.Data;  //usingSystem.Data.SqlClient;  privateconstintMaxPool=10;//***连接数  privateconstintMinPool=5;//最小连接数  privateconstboolAsyn_Process=true;//设置异步访问数据库  privateconstboolMars=true;//在单个连接上得到和管理多个、仅向前引用和只读的结果集(ADO.NET2.0)  privateconstintConn_Timeout=15;//设置连接等待时间  privateconstintConn_Lifetime=15;//设置连接的生命周期  privatestringConnString="";//连接字符串  privateSqlConnectionSqlDrConn=null;//连接对象   publicDbConn()//构造函数  {  ConnString=GetConnString();  SqlDrConn=newSqlConnection(ConnString);  }   privatestringGetConnString()  {  return"server=localhost;" +"integratedsecurity=sspi;" +"database=pubs;" +"MaxPoolSize="+MaxPool+";" +"MinPoolSize="+MinPool+";" +"ConnectTimeout="+Conn_Timeout+";" +"ConnectionLifetime="+Conn_Lifetime+";" +"AsynchronousProcessing="+Asyn_Process+";";  //+"MultipleActiveResultSets="+Mars+";";  }   publicDataTableGetDataReader(stringStrSql)//数据查询  {  //当连接处于打开状态时关闭,然后再打开,避免有时候数据不能及时更新  if(SqlDrConn.State==ConnectionState.Open)  {  SqlDrConn.Close();  }  try {  SqlDrConn.Open();  SqlCommandSqlCmd=newSqlCommand(StrSql,SqlDrConn);  SqlDataReaderSqlDr=SqlCmd.ExecuteReader();  if(SqlDr.HasRows)  {  DataTabledt=newDataTable();  //读取SqlDataReader里的内容  dt.Load(SqlDr);  //关闭对象和连接  SqlDr.Close();  SqlDrConn.Close();  returndt;  }  returnnull;  }  catch(Exceptionex)  {  System.Windows.Forms.MessageBox.Show(ex.Message);  returnnull;  }  finally {  SqlDrConn.Close();  }  }  }

通过调用SqlDrConn.Open()方法打开连接,这时候连接池就会初始化并建立设定的最小连接数。想更清楚了解到连接池的状况可以通过SQL的查询分析器执行存储过程sp_Who,它会列出当前的数据库进程,查看loginname、dbname可以区分用户的连接信息,但要注意的是登录查询分析器本身会使用两个连接,所以***用另一个用户名登录查询分析器。使用此方法还有一个麻烦地方就是要经常按“执行查询”以更新进程信息。还有另一种方法个人认为较好的,通过控制面板→管理工具→性能,右击添加计算器,性能对象选择SQlServer:GeneralStatistics(常规统计)然后计算器选择UserConnections(用户连接)***按“添加”就可以实时查看当前连接数。

到了这里,连接池已经实现了,但问题往往会出现在运行过程中。如连接池的连接数满了该怎样处理?在这里我们应该合理设置连接字符串中的ConnectTimeout属性和ConnectionLifetime属性(上面有解释)延长等待时间,尽可能地在每次使用完连接之后调用Close方法关闭连接。但从中也有没法避免的,当连接数满了并且申请连接的时间超过设置连接等待的时间时,程序将会引发InvalidOperationExceptio异常,我们可以通过捕获此异常向用户界面提示“系统正忙,请稍后再连接……”之类的信息来缓解这种情况。此外,也有另一种方法来解决这种情况,就是利用ADO.NET2.0新特性“异步进程”,对数据库进行异步操作,确保连接能够及时调用Close方法关闭连接,这样能大大减少正在使用的连接数。

使用方法:在连接字符串中加上AsynchronousProcessing=true表示使用异步处理操作。

当应用程序不再需要用到连接池的时候可以使用ClearPool或ClearAllPools方法清空连接池也可作重置连接池使用,方法如下:

SqlConnection.ClearPool(SqlConnectionconnection)清空关联的连接池

SqlConnection.ClearAllPools()清空所有连接池

调用上述方法,如果连接正在使用,连接池会做相应标记,等连接关闭时自动烧毁。

小结C#数据库连接池

到此,相信大家对“C#数据库连接池的创建”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI