一步步写自己SqlHelper类库(四):Connection对象

1.Connection对象基础

我们知道.NET Framework 数据提供程序包括四个核心对象Connection,Command,DataReader,DataAdapter。而上一章节谈到了连接字符串,现在前提条件有了,Connection对象就是时候出场了!

Connection 对象主要是开启程序和数据库之间的连接。没有利用Connection对象将数据库打开,是无法从数据库中取得数据的。如果把数据源比作大门,那么连接字符串则是钥匙,而连接对象则是拿着钥匙开门的人。

对于ADO.NET,不同的数据源,对应着不同的Connection对象。具体Connection对象如下表:

 

名称命名空间描述
SqlConnectionSystem.Data.SqlClient表示与SQL Server的连接对象
OleDbConnectionSystem.Data.OleDb表示与OleDb数据源的连接对象
OdbcConnectionSystem.Data.Odbc表示与ODBC数据源的连接对象
OracleConnectionSystem.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
}

   

    

作者: ForEvErNoME
出处: http://www.cnblogs.com/ForEvErNoME/
欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐关注
 
 
 
 
 

转载于:https://www.cnblogs.com/ForEvErNoME/archive/2012/04/21/2460719.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值