2.2 Connection 对象与数据库连接
在不同的Provider类型下,Connection对象的命名也是不同的,但它们有一个共同的功能,那就是管理与数据源的连接。
2.2.1 Connection对象的常用属性
Connectionion对象主要用于连接数据库,它的常用的属性如下。
ConnectionString属性:该属性用来获取或设置用于打开SQL Server数据库的字符串。
ConnectionTimeout属性:该属性用来获取在尝试建立连接时终止尝试,并生成错误之前所等待的时间。
DataBase属性:该属性用来获取当前数据库或连接打开后要使用的数据库的名称。
DataSource属性:该属性用来设置要连接的数据源实例名称。
例如SQLServer的Local服务实例。
State性该属性:是一个枚举类型的值,用来表示同当前数据库的连接状态。该属性的取值情况和含义如下表所示。
Provider值描述(ConnectionSate枚举成员值)
属 性 值 | 对应含义 |
Broken | 该连接对象与数据源的连接处于中断状态。只有当连接打开后再与数据库失去连接才会导致这种情况。可以关闭处于这种状态的连接,然后重新打开(该值是为此产品的未来版本保留的) |
Closed | 该连接处于关闭状态 |
Connecting | 该连接对象正在与数据源连接(该值是为此产品的未来版本保留的) |
Executing | 该连接对象正在执行数据库操作的命令 |
Fetching | 该连接对象正在检索数据 |
Open | 该连接处于打开状态 |
State属性一般是只读不写的,以下代码演示了使用State属性管理控制数据连接的方式。
//设置连接对象 SqlConnection conn; //如果是空闲状态,连接数据库 if(conn.State == ConnectionState.Closed) { conn.Open(); } //访问数据库的代码 …… //最后关闭连接 if(conn.State == ConnectionState.Open) { conn.Close(); }
2.2.2 Connection对象的连接字符串
在ConnectionString连接字符串里,一般需要指定将要连接数据源的种类、数据库服务器的名称、数据库名称、登录用户名、密码、等待连接时间、安全验证设置等参数信息,这些参数之间用分号隔开。下面将详细描述这些常用参数的使用方法。
1. Provider参数
Provider参数用来指定要连接数据源的种类。如果使用的是SQL ServerDatahovider,则不需要指定Provider参数,因为SQL Server DataProvider已经指定了所要连接的数据源是SQl Server服务器。如果使用的是O1eDB Data Provider或其他连接数据库,则必须指定Provider参数。(注意:有的人喜欢用udl获取数据库连接用的string,但是其中会带有Provider参数,编译时出错,所以当出错信息提示 Provider 有关的内容错误时,可以删除这一项。)
下表说明了Provider参数值和连接数据源类型之间的关系。
Provider值 | 对应连接的数据源 |
SQL OLE DB | Microsoft OLEDB Provider for SQL Server |
MSDASQL | Microsoft OLEDB Provider for ODBC |
Microsoft. Jet. OLEDB.4.0 | Microsoft OLEDB Provider for Access |
MSDAORA | Microsoft OLEDB Provider for Oracle |
2.Server参数
Server参数用来指定需要连接的数据库服务器(或数据域)。比如Server=(local),指定连接的数据库服务器是在本地,也可以用 Server = . 。如果本地的数据库还定义了实例名,Server参数可以写成Server=(local)\实例名。另外,可以使用计算机名作为服务器的值。如果连接的是远端的数据库服务器,Server参数可以写成Server=IP或“Server=远程计算机名”的形式。
Server参数也可以写成Data Source,比如Data Source=IP。
1 2 3 |
|
3.DataBase参数
DataBase参数用来指定连接的数据库名。比如DataBase=Master,说明连接的数据库是Master,DataBase参数也可以写成Initial Catalog,如Initial Catalog=Master。
4.User id参数和Password参数
Uid参数用来指定登录数据源的用户名,也可以写成UserID。比如Uid(User ID)=sa,说明登录用户名是sa。
Pwd参数用来指定连接数据源的密码,也可以写成Password。比如Pwd(Password)=asp.net,说明登录密码是asp.net。
5.Connect Timeout参数
Connect Timeout参数用于指定打开数据库时的最大等待时间,单位是秒。
如果不设置此参数,默认是15秒。如果设置成-1,表示无限期等待,一般不推荐使用。
6.Integrated Security参数
Integrated Security参数用来说明登录到数据源时是否使用SQL Server的集成安全验证。
如果该参数的取值是True(或SSPI,或Yes),表示登录到SQL Server时使用Windows验证模式,即不需要通过Uid和Pwd这样的方式登录。
如果取值是False(或No),表示登录SQL Server时使用Uid和Pwd方式登录。
一般来说,使用集成安全验证的登录方式比较安全(第一种如果),因为这种方式不会暴露用户名和密码。
安装SQL Server时,如果选中“Windows身份验证模式”单选按钮则应该使用如下的连接字符串Data Source=(local); Init Catalog=students; Integrated Security=SSPI;
Integrated Security=SSPI表示连接时使用的验证模式是Windows身份验证模式。
7.Pooling、MaxPool Size和Min Pool Size参数
Pooling参数用来说明在连接到数据源时,是否使用连接池,默认是True。
当该值为True时,系统将从适当的池中提取SQLConnection对象,或在需要时创建该对象并将其添加到适当的池中。
当取值为False时,不使用连接池。
当应用程序连接到数据源或创建连接对象时,系统不仅要开销一定的通信和内存资源,还必须完成诸如建立物理通道(例如套接字或命名管道),与服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证,运行检查以便在当前事务中 登记等任务,因此往往成为最为耗时的操作。
实际上,大多数应用程序仅使用一个或几个不同的连接配置。这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭。为了使打开的连接成本最低,ADO.NET使用称为Pooling(即连接池)的优化方法。
在连接池中,为了提高数据库的连接效率,根据实际情况,预先存放了若干数据库连接对象,这些对象即使在用完后也不会被释放。应用程序不是向数据源申请连接对象,而是向连接池申请数据库的连接对象。另外,连接池中的连接对象数量必须同实 际需求相符,空置和满载都对数据库的连接效率不利。
Max Pool Size和Min Pool Size这两个参数分别表示连接池中最大和最小连接数量,默认分别是100和0。根据实际应用适当地取值将提高数据库的连接效率。
8.综合实例
下面通过实例来说明连接字符串的具体含义。
如果连接字符串是:
"Provider= Microsoft.Jet.OleDB.4.0;Data Source=D:\login.mdb"
则说明数据源的种类是Microsoft.Jet.OleDB.4.0,数据源是D盘下的login.mdb Access数据库,用户名和密码均无。
如果连接字符串是:
"Server= (local); DataBase=Master;Uid =sa;Pwd=;ConnectionTimeout=20"
由于没有指定Provider,所以可以看出该连接字符串用于创建SqlConnection对象,连接SQL Server数据库。需连接的SQL Server数据库服务器是local,数据库是Master,用户名是sa,密码为空,而最大连接等待时间是20秒。