数据连接、断开及操纵封装类SQLHelper
来源:互联网 发布:control center4软件 编辑:程序博客网 时间:2024/05/14 07:59
为了提高代码的复用性、易修改,避免每次访问数据库时都要进行一系列的创建连接对象、Command对象、连接字符串等。本文封装了一个数据库连接访问类SQLHelper,下面对该类进行简单的介绍:
1、类的构造函数。在构造函数中实例化一个数据库连接对象,创建连接字符串,这样做的目的是,在创建一个SQLHelper对象时就已经建立了与数据库的连接。
2、LastError属性。LastError属性是当数据库连接异常时,最后出现的异常信息。
3、HandleException方法。处理异常的方法,将产生的异常归为四类,SqlException,InvalidOperationException,DBConcurrencyException和除此三类异常之外的其他异常,并根据这四类不同异常分别对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
- 数据连接、断开及操纵封装类SQLHelper
- sqlserver封装类SqlHelper及使用
- SqlHelper操纵数据库工具类
- 封装数据操纵语句
- 数据操作的封装--sqlhelper
- 断开所有的数据连接
- ADO操纵数据库封装类
- sqlhelper封装
- 封装SQLHelper
- C#SOCKET类封装,可发送文字图片,断开自动连接(有问题)
- JAVA WEB SQLHelper类的封装
- 数据访问基础类 SQLHelper
- 数据操作类 SQLHelper.cs
- 关于SO_LINGER及TCP断开连接
- [转] MySQLdb进一步封装,解决连接断开问题
- TCP协议封装格式及三次握手四次断开
- 封装一个SQLHelper
- c# SqlHelper 封装SqlDataReader
- 动态加载和动态注册类技术的深入探索_delphi教程
- JavaFX游戏开发效率浅谈
- Ubuntu - Windows下安装Ubuntu
- 黑马程序员 找字符代码示例
- 关于在datagridTag中使用attributes的说明
- 数据连接、断开及操纵封装类SQLHelper
- android:backupAgent
- 计算机科学中最重要的32个算法
- windows下的PHP开发环境安装
- kD-tree 的C语言实现 带有史上最全的注释和解释
- 交通灯管理系统
- DELPHI下自定义包的作用,开发以及包文件的安装配置位置
- 安装Fcitx输入法
- 海量dml表的统计问题