数据连接、断开及操纵封装类SQLHelper

    为了提高代码的复用性、易修改,避免每次访问数据库时都要进行一系列的创建连接对象、Command对象、连接字符串等。本文封装了一个数据库连接访问类SQLHelper,下面对该类进行简单的介绍:

1、类的构造函数。在构造函数中实例化一个数据库连接对象,创建连接字符串,这样做的目的是,在创建一个SQLHelper对象时就已经建立了与数据库的连接。

2、LastError属性。LastError属性是当数据库连接异常时,最后出现的异常信息。

3、HandleException方法。处理异常的方法,将产生的异常归为四类,SqlExceptionInvalidOperationExceptionDBConcurrencyException和除此三类异常之外的其他异常,并根据这四类不同异常分别对LastError属性赋予相应的异常信息。该方法为静态方法,有一个参数类型为Exception的参数。

4、ExecuteNonQuery方法。执行不返回结果集的SQL语句的方法,该方法参数中有一个待执行的SQl语句和与SQL语句相关的可变参数数组,是静态方法,程序不要求有任何返回值,但在定义此方法时返回了数值类型,用来表示执行当前语句后数据库中被影响的行数,但在程序的调用中可以不返回值,直接调用方法,若目标记录不存在返回0,出错返回-1,产生异常时显示异常信息。

5、ExecSQLByDataSet方法。该方法执行SQl语句,返回DataSet数据集合,参数中有一个待执行的SQl语句和与SQL相关的可变参数数组。该方法的优点是:通过直接调用此方法获得所需的DataSet数据集,而不需要每次都创建SqlDataAdapter对象来进行填充数据,提高了代码的复用性。该方法如出错返回null,出现异常时显示异常信息,为静态方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;

namespace SpecialEquipmentManagement
{
    class SQLHelper
    {        
        private static string lastError;//最近一次异常信息,定义为静态字段,方便被静态方法引用
        private SqlConnection conn;

        /// <summary>
        /// 无参构造函数
        /// </summary>
        public SQLHelper()
        {
            string str = @"Data Source=127.0.0.1;Initial Catalog=DBSpeEquManagement;Integrated Security=true";
            this.conn = new SqlConnection();//实例化一个数据连接对象
            this.conn.ConnectionString = str;
        }

        public void OpenDB()
        {
            this.conn.Open();
        }

        public void CloseDB ()
        {
            this.conn.Close();
        }

        /// <summary>
        /// 最近一次异常信息
        /// </summary>
        public static string LastError
        {
            get { return lastError; }
            //set { lastError = value; }
        }

        public SqlConnection Conn
        {
            get { return conn; }
            set { conn = value; }
        }

        /// <summary>
        /// 通用异常处理函数
        /// </summary>
        /// <param name="e">需要处理的异常</param>
        private static void HandleException(Exception e)
        {
            if (e is SqlException)
            {
                lastError = string.Format("在打开连接时出现连接级别的错误:{0}", e.Message);
            }
            else if (e is InvalidOperationException)
            {                
                lastError = e.Message;
            }
            else if (e is DBConcurrencyException)
            {
                //数据并发异常
                lastError = string.Format("尝试执行 INSERT、UPDATE 或 DELETE 语句,但没有记录受到影响:{0}", e.Message);
            }
            else
            {
                lastError = string.Format("未预料的异常:{0}", e.Message);
            }
        }
              
        /// <summary>
        /// 无返回值的SQL语句执行
        /// </summary>
        /// <param name="sql">欲执行的SQL语句</param>
        /// <param name="parameters">参数集合</param>
        /// <returns>影响记录的行数</returns>
        public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
        {
            string str = @"Data Source=127.0.0.1;Initial Catalog=DBSpeEquManagement;Integrated Security=true";
            using (SqlConnection conn = new SqlConnection(str))
            {
                try
                {
                    //Open异常捕获
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        foreach (SqlParameter param in parameters)
                        {
                            cmd.Parameters.Add(param);
                        }
                        return cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                {

                    HandleException(ex);
                    MessageBox.Show(SQLHelper.LastError);
                }
            }
            return -1;
        }

        /// <summary>
        /// 获得离线数据集合
        /// </summary>
        /// <param name="sql">欲执行的SQL语句</param>
        /// <param name="parameters">与SQL相关的参数</param>
        /// <returns>返回查询结果集合</returns>
        public static DataSet ExecSQLByDataSet(string sql, params SqlParameter[] parameters)
        {
            //parameters是可变的数组参数
            string str = @"Data Source=127.0.0.1;Initial Catalog=DBSpeEquManagement;Integrated Security=true";
            using (SqlConnection conn = new SqlConnection(str))
            {
                try
                {
                    conn.Open();//打开数据库连接
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        foreach (SqlParameter parameter in parameters)
                        {
                            cmd.Parameters.Add(parameter);
                        }
                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        conn.Close();//有必要关闭数据库连接的吗?
                        return ds;
                    }
                }
                catch (Exception ex)
                {
                    HandleException(ex);
                    MessageBox.Show(SQLHelper.LastError);
                }
            }
            return null;
        }

        /// <summary>
        /// 将本地修改的结果集提交至服务器
        /// </summary>
        /// <param name="ds">已修改的结果集合</param>
        public static void UpdateByDataSet(DataSet ds)
        {
            string str = @"Data Source=127.0.0.1;Initial Catalog=DBSpeEquManagement;Integrated Security=true";
            using (SqlConnection conn = new SqlConnection(str))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    new SqlCommandBuilder(da);
                    da.ContinueUpdateOnError = true;
                    try
                    {                        
                        da.Update(ds);
                    }
                    catch (Exception ex)
                    {
                        HandleException(ex);
                        MessageBox.Show(SQLHelper.LastError);
                    }
                }
            }
        }
    }
}

 自己参考博客改写的一个数据库简易封装类,水平有限,有什么问题希望朋友们指出!

参考博客:http://www.cnblogs.com/ForDream/archive/2011/07/28/2119834.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值