第三章 连接数据库
在ADO.NET中,Connection对象就代表了与数据源之间的连接,Connection对象还用作创建查询和事务的起始点。所有的
连接类都派生自System.Data.Command命名空间中的DbConnection类。
3.1 生成SqlConnection对象
有两种方式生成SqlConnection对象,第一种是建立一个未初始化的SqlConnection对象,即New SqlConnection ;第二种方式是使用连接字符串作为构造函数的参数,即:New SqlConnection(StrCon)。
3.2 打开SqlConnection对象
生成实例后,其被初始化为“关闭”状态。如果是在没有打开的情况下执行SqlCommand语句;打开后,又继续使用Open命令进行打开链接,都会产生InvalidOperationException异常。
3.3 关闭SqlConnection对象。使用Close方法。
3.4 自行清除连接。
调用SqlConnection的Dispose方法会隐式调用Close方法。一种简单的方法是将SqlConnection放在Using模块中。在Using模块结束的时候就自动调用Dispose方法,结束SqlConnection的链接。
3.5连接字符串
- 连接到本地默认实例:Data Source=.;
- 连接到本地已命名的实例 Data Source=.\SQLExpress
- 使用集成安全性 Integrated Security=True
3.5.2 连接字符串生成器简介
链接字符串好处多多,可以方便记忆关键字,解决不同数据库连接不同关键字的问题,还可以防止数据库注入。
3.5.3 连接字符串的安全性
参看:SqlClientPermission类
3.6 连接池
- 连接池是一种在打开数据库存储区的连接时提高应用程序性能的机制。连接池被保存在使用数据库的程序的机器上,如果是B/S架构,被保存在服务器上,如果是C/S架构,就被保存在单机(C)上。
- 如果要禁用连接池,那么需要在连接字符串中指定:Pooling=False 。不过有连接池的确会好很多:参看《数据库连接池的作用有多大?》
- 强制使用新池,如果你有喜新厌旧的心态,那么在连接字符串的最后加一个空格,就会每次都使用新连接池了。
- 手动释放连接池中的缓存,ClearPool 和 ClearAllPool 。ClearPool会清除“自由的”连接。
- Connection Reset:会自动清除一些不用的连接,可以在连接字符串中设置为False,但是不建议这样去做。
- Min Pool Size:默认是0 。
- Max Pool Size:默认是100 。
3.7 将SqlConnection用作起始点
SqlConnection可以用作--创建命令、开始事务以及提取架构信息的起始点。
- 创建命令:cn.zCreateCOmmand()
- 开始事务:cn.BeginTransaction()
- 获取架构信息:cn.GetSchema(),返回一个DataTable 。
获取架构信息是一个很有帮助的方法,可以得到数据库中的所有表,表格格式和限制条件等很有用的信息。当然,如何才能得到呢?调用GetSchema()方法就可以得到元数据的枚举值。例如,cn.GetSchema("tables"),就返回数据库中所有的表。
GetSchema还有一个重载版本,可以使用一个字符串作为参数,用作查询架构信息时的筛选器。其中这个字符串的结构由GetSchema("Restrictions")来限制。

所以书中的字符串分别对应Column的第四列,table_catclog,Table_Schema,table_Name,Columa_name ,要是没有限制,则使用Nothing 。
3.8 Visual Studio 设计时特性
服务器资源管理器可以当作SQL SERVER的企业管理器使用。
3.9 SqlConnection对象参考
属性:
属性
|
数据类型
|
说明
|
ConnectionString
|
String
|
控制SqlConnection对象如何连接到数据库。当连接数据库以后,这个属性变为只读。
|
ConnectionTimeOut
|
Int32
|
指定SqlConnection在尝试连接到数据源时等待多少秒(只读)。在建立连接字符串时设定。
|
DataBase
|
String
|
返回已经连接或者将要连接的数据库名称,例如NorthWind(只读)。在建立连接字符串时设定。 |
DataSource
|
String
|
返回已连接或将要连接数据库的位置,例如10.10.10.10(只读)。在建立连接字符串时设定。 |
FireInfoMessageEventOnUserErrors
|
Boolean
|
控制发生用户错误时是否激发InfoMessage事件,默认情况下,这一属性被设置为false.可以在关闭和开放式的SqlConnection上修改此属性。
|
PacketSize
|
Int32
|
返回与SQL Server进行通信时所使用的数据包大小(只读)。
|
ServerVersion
|
String
|
返回数据源的版本(只读)
|
State
|
String
|
返回是Open 或者 Close
|
StatisticsEnable
|
Boolean
|
控制是否为该连接启用统计。默认情况下,此属性被设置为False,可以对关闭和开放式的SqlConnection修改此属性。
|
WorkStationId
|
String
|
返回数据库终端的名称,默认是机器名(只读)。
|
FireInfoMessageEventOnUserError :假设查询一个不存在的表,会出现一个异常错误,但是如果将其值设为True,则会产生一个InfoMessage的事件。
ServerVersion:Sql 2000的版本是8.0 ,Sql 2005的版本是9.0 。如果连接关闭,则会返回InvalidOperationException 。
方法:
方法
|
说明
|
BeginTransaction
|
开始一个事务
|
ChangeDataBase
|
修改一个开放式连接的当前数据库
|
ClearAllPools
|
清除连接池中的所有自由连接(静态)。
|
ClearPool
|
清除与所提供SqlConnection相关的连接池中的自由连接(静态)。
|
Close
|
关闭连接
|
CreateCommand
|
建立一个SqlCommand对象
|
EnlistDistrbutedTransaction
|
在一个COM+分布式事务手动登记该连接
|
EnlistTranSaction
|
在一个System.transaction事务手动登记该连接
|
GetSchema
|
返回该链接的架构信息
|
Open
|
打开一个连接
|
ResetStatistics
|
重置当前连接的统计信息
|
RetrieveStatistics
|
返回当前连接的统计信息
|
事件
事件
|
说明
|
InfoMessage
|
当连接从数据库接收信息时发生
|
StateChange
|
当连接的State属性发生变化时
|
发表于 @ 2008年03月29日 17:03:00|评论(loading...)|编辑