Web.config之连接字介绍
2012-09-11 22:40
316 查看
一.连接字配置方式
web.config中有两种方式来配置连接字:<appsetting>中配置,<connectionStrings>中配置。1.<appsetting>中配置
<configuration> <appSettings> <add key="connstr1" value="Data Source=.;Initial Catalog=DBName;Integrated Security=true"/> </appSettings> </configuration>
①这种方式是asp.net1.1的时候用的,asp.net后续版本也支持这种方式
②appsetting里面存的相当于键值对的形式,key和value。不仅仅可以存连接字符串,还可以存储一些配置项。
③在appSettings中,不能使用ProviderName="System.Data......."(不过如果你要用也可以,只要写在value里面就可以了,当成值传递过去)
④在后台程序代码中通过如下方式取得数据库连接字的值:
string conn=System.Configuration.ConfigurationManager.AppSettings["connstr";]
2.<connectionStrings>中配置
<configuration> <connectionStrings> <add name="connstr3" connectionString="........" /> <add name="connstr4" connectionString="......" providerName="System.Data.Sqlclient" </connectionStrings> </configuration>
①它是asp.net2.0中新增的,后续版本也支持这种方式
②里面存的也类似于键值对的形式,使用的是name和connectionString,一般就存连接字符串。
③在connectionStrings中可以,可以使用providerName.
④在后台代码,取值的方式:
string conn=System.Configuration.ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
既然connectionStrings是2.0版本出来的,那它肯定比appsettings有好处了:
① 可将连接字符串加密,使用MS的一个加密工具即可。
② 可直接邦定的数据源控件,而不必写代码读出来再赋值给控件。 ③ 可方便的更换数据库平台,如换为Oracle数据库,只需修改providerName
二. providerName它的作用
providerName参数指定数据提供程序。数据提供程序用于连接到数据库、执行命令和检索结果。providerName的参数可能的值包括:
①providerName="System.Data.SqlClient" ----说明使用的是MSSQLServer数据库 ②providerName="System.Data.SqlLite" ----说明使用的是SQLLite数据库 ③providerName="System.Data.OracleClient" ----说明使用的是Oracle数据库 或providerName="System.Data.Oracle.DataAccess.Client" ----同上 ④providerName="System.Data.OleDb" ----说明使用的是Access数据库 在连接字中设置providerName参数的值,就是告诉CLR使用providerName值指定的一套程序代码去连接数据库。其实不写也没关系,CLR会自己判断数据库类型进行连接。连接好之后,数据库是什么类型的,我们就要采用相应的数据库提供程序来操作数据库,即SQL Server数据库采用SqlCommand那一套,Access数据库就采用OleDbCommand那一套。
三.Connection Pool 是什么
有时可能会看到连接字中有min pool size,max pool size之类的值,这个值是设置连接池大小的。每当程序需要读写数据库的时候。Connection.Open()会使用ConnectionString连接到数据库,数据库会为程序建立 一个连接,并且保持打开状态,此后程序就可以使用T-SQL语句来查询/更新数据库。当执行到Connection.Close()后,数据库就会关闭当 前的连接。很好,一切看上去都是如此有条不紊。
但是如果我的程序需要不定时的打开和关闭连接,(比如说 ASP.Net 或是 Web Service ),例如当Http Request发送到服务器的时候、,我们需要打开Connection 然后使用Select* from Table 返回一个DataTable/DataSet给客户端/浏览器,然后关闭当前的Connection。那每次都Open/Close Connection 如此的频繁操作对于整个系统无疑就成了一种浪费。
ADO.Net Team就给出了一个比较好地解决方法。将先前的Connection保存起来,当下一次需要打开连接的时候就将先前的Connection 交给下一个连接。这就是Connection Pool。
Connection Pool 如何工作的?
首先当一个程序执行Connection.open()时候,ADO.net就需要判断,此连接是否支持Connection Pool (Pooling 默认为True),如果指定为False, ADO.net就与数据库之间创建一个连接(为了避免混淆,所有数据库中的连接,都使用”连接”描述),然后返回给程序。
如果指定为 True,ADO.net就会根据ConnectString创建一个Connection Pool,然后向Connection Pool中填充Connection(所有.net程序中的连接,都使用”Connection”描述)。填充多少个Connection由Min Pool Size (默认为0)属性来决定。例如如果指定为5,则ADO.net会一次与SQL数据库之间打开5个连接,然后将4个Connection,保存在 Connection Pool中,1个Connection返回给程序。
当程序执行到Connection.close() 的时候。如果Pooling 为True,ADO.net 就把当前的Connection放到Connection Pool并且保持与数据库之间的连接。
同时还会判断Connection Lifetime(默认为0)属性,0代表无限大,如果Connection存在的时间超过了Connection LifeTime,ADO.net就会关闭的Connection同时断开与数据库的连接,而不是重新保存到Connection Pool中。
(这个设置主要用于群集的SQL 数据库中,达到负载平衡的目的)。如果Pooling指定为False,则直接断开与数据库之间的连接。
然后当下一次Connection.Open() 执行的时候,ADO.Net就会判断新的ConnectionString与之前保存在Connection Pool中的Connection的connectionString是否一致。
然后 ADO.net需要判断当前的Connection Pool中是否有可以使用的Connection(没有被其他程序所占用),如果没有的话,ADO.net就需要判断ConnectionString设 置的Max Pool Size (默认为100),如果Connection Pool中的所有Connection没有达到Max Pool Size,ADO.net则会再次连接数据库,创建一个连接,然后将Connection返回给程序。
如果已经达到了 MaxPoolSize,ADO.net就不会再次创建任何新的连接,而是等待Connection Pool中被其他程序所占用的Connection释放,这个等待时间受SqlConnection.ConnectionTimeout(默认是15 秒)限制,也就是说如果时间超过了15秒,SqlConnection就会抛出超时错误(所以有时候如果SqlConnection.open()方法抛 出超时错误,一个可能的原因就是没有及时将之前的Connnection关闭,同时Connection Pool数量达到了MaxPoolSize。)
如果有可用的Connection,从Connection Pool 取出的Connection也不是直接就返回给程序,ADO.net还需要检查ConnectionString的ConnectionReset属性 (默认为True)是否需要对Connection 最一次reset。这是由于,之前从程序中返回的Connection可能已经被修改过,比如说使用 SqlConnection.ChangeDatabase method 修改当前的连接,此时返回的Connection可能就已经不是连接当前的Connection String指定的Initial Catalog数据库了。所以需要reset一次当前的连接。但是由于所有的额外检查都会增大ADO.net Connection Pool 对系统的开销。
参考资料:
1.【ASP.NET】--web.config中的连接字符串
2.超时时间已到.错误及Max Pool Size设置
原文转载:http://www.cnblogs.com/bayes/archive/2012/09/05/2672306.html
相关文章推荐
- Web.config之连接字介绍
- Web.config之连接字介绍
- web.config中connectionStrings数据库连接字符串介绍
- Web.config之连接字介绍
- 从Web.Config中读取数据库连接字符串的问题
- web.config配置数据库连接+Ado.net对象操作sql数据库
- c#连接oracle在web.config中的连接数据库语句
- web.config connectionStrings 数据库连接字符串的解释(转载)
- web.config 设置Oracle连接字符串
- ASP.NET通过配置Web.config文件提高手动绑定数据库效率的一个简单方法,不用每次手动连接数据库地址,或者数据库地址变更时只改一处即可。
- Asp.Net中Web.Config中的数据库连接字符串的调用方法(初学者实例)
- 在web.config中配置连接数据库
- Web.Config文件中数据库连接配置
- web.config配置数据库连接
- ASP.NET web.config中,数据库连接字符串的加密与解密
- web.config connectionStrings 数据库连接字符串的解释(转载)
- 加密(编码)web.config中的信息(如:连接字符串)
- ASP.NET配置(web.config)无法连接到SQL Server 数据库的解决方法
- web.config connectionStrings 数据库连接字符串的解释(转载)
- 对web.config中的数据库连接字符串进行加密