1.Connection对象基础
我们知道.NET Framework 数据提供程序包括四个核心对象Connection,Command,DataReader,DataAdapter。而上一章节谈到了连接字符串,现在前提条件有了,Connection对象就是时候出场了!
Connection 对象主要是开启程序和数据库之间的连接。没有利用Connection对象将数据库打开,是无法从数据库中取得数据的。如果把数据源比作大门,那么连接字符串则是钥匙,而连接对象则是拿着钥匙开门的人。
对于ADO.NET,不同的数据源,对应着不同的Connection对象。具体Connection对象如下表:
名称 | 命名空间 | 描述 |
SqlConnection | System.Data.SqlClient | 表示与SQL Server的连接对象 |
OleDbConnection | System.Data.OleDb | 表示与OleDb数据源的连接对象 |
OdbcConnection | System.Data.Odbc | 表示与ODBC数据源的连接对象 |
OracleConnection | System.Data.OracleClient | 表示与Orale数据库的连接对象 |
2.Connection对象属性,方法和事件(以SqlConnection为例)
2.1 属性
属性 | 说明 |
connectionstring | 其返回类型为string,获取或设置用于打开 sql server 数据库的字符串。 |
connectiontimeout | 其返回类型为int,获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。 |
database | 其返回类型为string,获取当前数据库或连接打开后要使用的数据库的名称。 |
datasource | 其返回类型为string,获取要连接的 sql server 实例的名称。 |
state | 其返回类型为connectionstate,取得当前的连接状态:broken、closed、connecting、fetching或open。 |
serverversion | 其返回类型为string,获取包含客户端连接的 sql server 实例的版本的字符串。 |
packetsize | 获取用来与 sql server 的实例通信的网络数据包的大小(以字节为单位)。这个属性只适用于sqlconnection类型 |
2.2 方法
方法 | 说明 |
close() | 其返回类型为void,关闭与数据库的连接。 |
Dispose() | 释放由 Component 使用的所有资源 |
open() | 其返回类型为void,用连接字符串属性指定的属性打开数据库连接 |
2.3 事件
事件 | 说明 |
statechange | 当事件状态更改时发生。 (从 dbconnection 继承。) |
infomessage | 当 sql server 返回一个警告或信息性消息时发生。 |
3.使用Connection对象
由Connection对象中的state属性可以判断当前应用程序与数据源的连接状态。ConnectionState是一个枚举类型。它包括以下成员:
Closed: 连接处于关闭状态。
Open: 连接处于打开状态。
Connecting: 连接对象正在与数据源连接。
Executing: 连接对象正在执行命令。
Fetching: 连接对象正在检索数据。
Broken: 与数据源的连接中断。
步骤:
1.首先生成一个SqlConnection的对象conn
2.判断conn的State状态是否为打开状态,如果不是,则调用Open方法打开数据库
3.同理,关闭数据也是这样操作
SqlConnection conn = new SqlConnection(); if (conn.State != ConnectionState.Open) { conn.Open(); } if (conn.State == ConnectionState.Open) { conn.Close(); }
4.注意要点(可米小子)
(1)添加try...catch块
我们知道连接数据库时,可能出现异常,因此需要添加异常处理。对于C#来说,典型的异常处理是添加try...catch代码块。finially是可选的。finially是指无论代码是否出现异常都会执行的代码块。而对数据库连接资源来说,是非常宝贵的。因此,我们应当确保打开连接后,无论是否出现异常,都应该关闭连接和释放资源。所以,我们必须在finially语句块中调用Close方法关闭数据库连接。
SqlConnection conn = new SqlConnection(); try { conn.Open(); } catch(Exception ex) { } finially { conn.Close(); }
(2)使用using语句
using语句的作用是确保资源使用后,并很快释放它们。using语句帮助减少意外的运行时错误带来的潜在问题,它整洁地包装了资源的使用。具体来说,它执行以下内容:
- 分配资源。
- 把Statement放进try块。
- 创建资源的Dispose方法,并把它放进finally块。
因此,上面的语句等同于:
using(SqlConnection conn = new SqlConnection()) { }
5.SqlHelper类
对Connection对象有一定的了解后,我们可以简单地写出打开,关闭数据库的操作。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Data.SqlClient; using System.Configuration; /// <summary> ///SqlHelper create by TerryChan 2012-04-21 /// </summary> public class SqlHelper { #region 全局配置 /// <summary> /// 连接字符串 /// </summary> public readonly static string connectionString = ConfigurationManager.ConnectionStrings["connstring"].ToString(); /// <summary> /// SqlConnection对象 /// </summary> private static SqlConnection conn = new SqlConnection(connectionString); #endregion #region 打开数据库 /// <summary> /// 打开数据库 /// </summary> public static void OpenConnection() { if (conn.State != ConnectionState.Open) { try { conn.Open(); } catch (Exception ex) { conn.Dispose(); throw new Exception("打开数据库失败!" + ex.Message); } } } #endregion #region 关闭数据库 /// <summary> /// 关闭数据库 /// </summary> public static void CloseConnection() { if (conn.State == ConnectionState.Open) { try { conn.Close(); } catch (Exception ex) { conn.Dispose(); throw new Exception("关闭数据库失败!" + ex.Message); } } } #endregion }