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

来源:互联网 发布:control center4软件 编辑:程序博客网 时间:2024/05/14 07:59

    为了提高代码的复用性、易修改,避免每次访问数据库时都要进行一系列的创建连接对象、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