文章教程

11.2连接数据库

8/31/2020 9:37:14 PM 人评论 次浏览

11.2 连接数据库

使用ADO.NET数据源控件可以灵活地实现ASP.NET数据库的连接,也可以使用ADO.NET类来访问数据库,如System.Data.SqlClient、System.Data.OleDb、System.Data.Odbc和System.Data.OracleClient。通常数据库的连接使用Web.config文件来配置,将这些数据提供程序指定为连接字符串的一部分。

11.2.1 SqlConnection数据库连接类

通过SqlConnection类可以访问所连接数据库的架构信息。

SqlConnection类的功能分为以下几个类别。

(1)通过SqlConnection类,可以访问所连接数据库的架构信息。数据库的架构说明数据库的表、列、索引和触发器的定义。

(2)创建一个本地SQL数据库文件,或通过调用open()方法或SQLStatement的SqlConnection属性的SqlConnection实例打开一个本地SQL数据库文件。

SqlConnection类还提供SQL语句的状态,包括在事务中执行多个语句的机制。使用begin()、commit()和rollback()方法管理事务。此外,setSavepoint()、releaseSavepoint()和rollbackToSavepoint()方法允许代码定义和管理保存点,这些方法用于将事务分割为几组操作。

(3)通过SqlConnection类,可以使用AES-CCM对数据库加密,这样为数据提供了身份验证和保密性。为了对数据库加密,创建数据库时必须指定一个16字节的密钥(使用ByteArray指定),以后可以使用SqlConnection reencrypt()方法更改此密钥。加密会降低数据库的读写性能。加密应用于磁盘上存储的数据,但不应用于内存中的临时数据缓存。对于内存中的数据库不支持加密。

(4)使用SqlConnection实例接收数据库级别的事件通知,并控制数据库各个方面的配置,其中,包括缓存页大小、过程取消和语句执行选项。

使用SqlConnection类时,需要在命名空间区域引用using System.Data和using System.Data.SqlClient命名空间。

11.2.2 使用SqlConnectionStringbuilder连接字符串

在ADO.NET的早期版本中,对具有串联字符串值的连接字符串在编译时并不会检查,因此在运行时,不正确的关键字会产生ArgumentException,而每个.NET Framework数据提供者支持的连接字符串关键字的语法不同,这让手动构造有效连接字符串变得非常困难。为了解决这个问题,ADO.NET为每个.NET Framework数据提供程序引入了新的连接字符串生成器。每个数据提供程序包括一个从DbConnectionStringBuilder继承的强类型连接字符串生成器类。表11-2列出了.NET Framework数据提供者及其关联的连接字符串生成器类。

表11-2 .NET Framework数据提供者及其关联的连接字符串类

alt

使用连接字符串生成器SqlConnection Stringbuilder,可以很方便准确地生成数据库连接字符串,并且对防止注入也有一定的益处。

比如,使用SqlConnectionStringBuilder生成连接数据库的字符串,代码如下。

alt

在上面的示例代码中,创建了连接到本机名为“Test”的数据库,并且打开了连接。

11.2.3 关闭和释放连接

在ASP.NET中,当用户不再使用资源时,可以释放器所使用的资源。Dispose方法提供了对资源的释放,调用该方法可以将制定的对象资源释放。

在对象的释放中有时还可以用Close方法,该方法能够关闭所使用的对象,它和Dispose方法的差别在于一个是关闭,一个是释放,代码如下。

alt

上述代码中的Close方法只是将数据库链接进行关闭,关闭之后可以重新Open。而Dispose方法可以将数据库链接关闭而且将该链接也进行清空,清空之后不能Open,若想重新Open,必须要重新赋值。

当然,这两者并不能销毁SqlConnection对象,即不能释放链接对象在数据库中所占用的资源,而是在某一时间由垃圾回收器自动销毁、回收。.NET提供了垃圾回收器(Garbage Collector)自行毁灭物件,它自动释放用来存储不再需要对象的内存,但内存的释放具有不确定性,而且不定时执行,一旦通用语言运行库(CLR)决定执行垃圾回收,就会释放内存。

11.2.4 在Web.config配置文件中保存连接字符串

Web.config用来储存ASP.NET Web应用程序的配置信息,如果事先知道连接字符串的某些元素,可以将其存储在Web.config文件中,以便于修改。下面介绍Web.config配置数据库连接的方法。

方法1:在Web.config文件中的< connectionStrings >与</connectionStrings>之间书写如下代码。

alt

在需要使用的页面后台文件,可使用以下代码。

alt

方法2:在Web.config文件中的<appsettings>和</appsettings>之间书写如下代码。

alt

比如,

alt

其中,user id=sa:表示连接数据库的验证用户名为sa,也可以使用"uid"代替user id,所以可写为"uid=sa"。

password=123456:表示连接数据库的验证密码为123456,也可以使用"pwd"代替password,所以可写为"pwd=123456"。

database=Test:表示使用的数据库为Test,也可以使用“initial catalog”代替database,所以可写为“initial catalog=Test”。

Server=(local):表示使用名为"local"的服务器,通常表示本机,也可以使用“data source”来代替“Server”,所以可写为“data source=local”。

11.2.5 连接池技术

连接到数据库服务器通常由几个需要很长时间的步骤组成。首先建立物理通道(如套接字或命名管道),与服务器进行初次握手,然后分析连接字符串信息,由服务器对连接信息进行身份验证,同时运行检查以便在当前事务中登记。

实际上,大多数应用程序仅使用一个或几个不同的连接配置,这意味着在执行应用程序期间,许多相同的连接将反复打开和关闭。为了使打开连接花费的系统开销最小,ADO.NET使用了连接池技术。

连接池,通常只有配置相同的连接才可以建立池连接。ADO.NET可以同时保留多个池,每种配置各一个。在使用集成的安全性时,连接按照连接字符串及Windows标识分到多个池中。

使用连接池技术可以显著提高应用程序的性能和可缩放性。默认情况下,ADO.NET中是启用连接池技术的,除非显式禁用,否则,在应用程序中打开和关闭连接时,池进程会对连接进行优化,还可以提供几个连接字符串修饰符来控制连接池的行为。

在首次连接时,因为需要解析字符串、授权、检查和服务器握手等操作,所以相对耗时,但是在首次连接建立后,这些繁琐的操作就会省略,因为有了连接池机制,SqlConnection默认开启了连接池的功能,当程序执行SqlConnection.Close()方法后,连接并不会被立即释放,而是被存到了连接池中,当下一次再有连接请求时,直接从连接池中调出该连接使用即可。

下例创建了三个新的SqlConnection对象,但是管理时只需要两个连接池。注意,第一个和第二个连接字符串有所不同。

alt

SqlConnection对象的ConnectionString属性支持连接字符串键/值对,可以用于调整连接池逻辑的行为,有关池的详细内容可以参考相关的书籍或MSDN技术资料。

教程类别