博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
强大的数据库访问类dbhelper 2.0 转
阅读量:6997 次
发布时间:2019-06-27

本文共 8887 字,大约阅读时间需要 29 分钟。

优点:

1、多数据库支持

2、多数据库类型支持

3、强大的查询公用方法,如支持返回泛型实体对象集合,泛型值类型集合,实体对象,数据集等。

4、所有方法都支持参数化与非参数化访问db,调用十分方便。

5、使用了线程本地存储,使之能支持在业务逻辑层显式控制事务。

6、注释较为详细,配置十分简单,方法较为简洁(加上注释总共200多行代码)。

7、开源,容易修改。

源代码:DBManager

public class DBManager    {        ///         /// 默认的数据库连接        ///         public static readonly string connectionString = ConfigurationManager.AppSettings["ConnectionString"];        ///         /// 数据库类型 默认支持sqlserver数据库        ///         public static readonly string dbProviderName = string.IsNullOrEmpty(ConfigurationManager.AppSettings["dbProviderName"])                                                    ? "System.Data.SqlClient" : ConfigurationManager.AppSettings["dbProviderName"];        [ThreadStatic]        static DBHelper helper;        ///         /// 创建默认的数据库访问类        ///         /// 
public static DBHelper Instance() { if (helper == null) { helper = new DBHelper(connectionString, dbProviderName); return helper; } return helper; } }

DBHelper:

public class DBHelper    {        private string connectionString = string.Empty;        private DbProviderFactory factory;        private DbConnection _connection;        public DbConnection connection        {            get { return _connection; }            set { _connection = value; }        }        private DbTransaction _transaction;        public DbTransaction transaction        {            get { return _transaction; }            set { _transaction = value; ;}        }        public DBHelper(string connectionString, string dbProviderName)        {            this.connectionString = connectionString;            factory = DbProviderFactories.GetFactory(dbProviderName);        }        ///         /// 打开数据库连接        ///         public void OpenConnection()        {            if (connection == null)            {                 connection = factory.CreateConnection();                connection.ConnectionString = connectionString;            }            if (connection.State != ConnectionState.Open)                connection.Open();        }        ///         /// 开启事务        ///         public void BeginTransaction()        {            OpenConnection();            if (transaction == null)                transaction = connection.BeginTransaction();        }        ///         /// 提交事务 并且 释放并关闭资源        ///         public void CommitTransaction()        {            if (transaction != null)            {                transaction.Commit();                transaction.Dispose();                transaction = null;                Dispose();            }        }        ///         /// 回滚事务 并且 释放并关闭资源        ///         public void RollbackTransaction()        {            if (transaction != null)            {                transaction.Rollback();                transaction.Dispose();                transaction = null;                Dispose();            }        }        ///         /// 如果没有开启事务就自动释放资源,关闭连接,否则在提交或回滚事务的时候释放        ///         public void Dispose()        {            if (transaction == null)            {                if (connection != null)                {                    connection.Dispose();                    connection.Close();                    connection = null;                }            }        }        private DbCommand CreateCommand(CommandType cmdType, string cmdText, params DbParameter[] cmdParas)        {            DbCommand mand = connection.CreateCommand();            mand.CommandText = cmdText;            mand.CommandType = cmdType;            mand.Parameters.AddRange(cmdParas);            if (transaction != null) mand.Transaction = transaction;            return mand;        }        ///         /// 返回一个数据集        ///         ///         ///         ///         /// 
public DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params DbParameter[] cmdParas) { try { OpenConnection(); DbCommand mand = CreateCommand(cmdType, cmdText, cmdParas); DbDataAdapter data = factory.CreateDataAdapter(); DataSet ds = new DataSet(); data.Fill(ds); return ds; } catch (Exception ex) { throw ex; } finally { Dispose(); } } /// /// 返回受影响的行数 /// /// /// /// ///
public int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] cmdParas) { try { OpenConnection(); DbCommand mand = CreateCommand(cmdType, cmdText, cmdParas); return mand.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { Dispose(); } } /// /// 返回结果集中第一行第一列 /// /// /// /// ///
public object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] cmdParas) { try { OpenConnection(); DbCommand mand = CreateCommand(cmdType, cmdText, cmdParas); return mand.ExecuteScalar(); } catch (Exception ex) { throw ex; } finally { Dispose(); } } /// /// 返回泛型集合 /// ///
/// /// /// ///
public IList
ExecuteReaderList
(CommandType cmdType, string cmdText, params DbParameter[] cmdParas) { try { OpenConnection(); DbCommand mand = CreateCommand(cmdType, cmdText, cmdParas); DbDataReader reader = mand.ExecuteReader(); IList
list = ToList
(reader); return list; } catch (Exception ex) { throw ex; } finally { Dispose(); } } ///
/// 返回一个对象 如数据库无结果返回将抛出异常 /// ///
///
///
///
///
public T ExecuteReaderObject
(CommandType cmdType, string cmdText, params DbParameter[] cmdParas) { return ExecuteReaderList
(cmdType, cmdText, cmdParas)[0]; } ///
/// 反射创建泛型集合 /// ///
///
///
private IList
ToList
(DbDataReader reader) { Type type = typeof(T); IList
list = null; if (type.IsValueType || type == typeof(string)) list = CreateValue
(reader, type); else list = CreateObject
(reader, type); reader.Dispose(); reader.Close(); return list; } private IList
CreateObject
(DbDataReader reader, Type type) { IList
list = new List
(); PropertyInfo[] properties = type.GetProperties(); string name = string.Empty; while (reader.Read()) { T local = Activator.CreateInstance
(); for (int i = 0; i < reader.FieldCount; i++) { name = reader.GetName(i); foreach (PropertyInfo info in properties) { if (name.Equals(info.Name)) info.SetValue(local, Convert.ChangeType(reader[info.Name], info.PropertyType), null); break; } } list.Add(local); } return list; } private IList
CreateValue
(DbDataReader reader, Type type) { IList
list = new List
(); while (reader.Read()) { T local = (T)Convert.ChangeType(reader[0], type, null); list.Add(local); } return list; } }

调用示例:

///         /// 事务示例        ///         public void TestExecuteNonQueryBeginTran()        {            try            {                DBManager.Instance().BeginTransaction();                DBManager.Instance().ExecuteNonQuery(CommandType.Text, "update  warningTest set pid=0 where id=3");                DBManager.Instance().ExecuteNonQuery(CommandType.Text, "update  warningTest set pid=aaa where id=4");                DBManager.Instance().CommitTransaction();                int num = DBManager.Instance().ExecuteNonQuery(System.Data.CommandType.Text, "select * from warningTest");            }            catch { DBManager.Instance().RollbackTransaction(); }        }        ///         /// 查询实体对象集合示例        ///         public void TestExecuteReaderList()        {            SqlParameter para = new SqlParameter("@id", 1);            warningTest warning = DBManager.Instance().ExecuteReaderObject
(CommandType.Text, "select * from warningTest where id=@id", para); Assert.AreEqual(1, warning.id); } ///
/// 查询值类型集合示例 /// public void TestExecuteReaderListByInt() { IList
list = DBManager.Instance().ExecuteReaderList
(CommandType.Text, "select Logic from warningTest"); foreach (string i in list) { Console.WriteLine(i.ToString()); } }

下载:

补充说明:数据库备份文件在Data.test\App_Data文件夹下面

转载地址:http://euovl.baihongyu.com/

你可能感兴趣的文章
quick-cocos2d-x游戏开发【8】——动画与动作
查看>>
【Deeplearning】关注书目
查看>>
spring mvc 注解示例
查看>>
【再见RMQ】NYOJ-119-士兵杀敌(三),区间内大小差值
查看>>
loadrunner中Run-time-Setting设置
查看>>
tomcat配置文件server.xml具体解释
查看>>
MVC模式简单介绍
查看>>
SSL连接建立过程分析(1)
查看>>
port与大全portClose方法
查看>>
不得不说的JavaScript异步加载
查看>>
美丽的数学家:如果您讨厌数学,这些其实都是人生故事
查看>>
Kettle 中转换(transformation)的执行过程
查看>>
读书笔记-互联网思维阅读10其中一本书《自由》
查看>>
11G新特性 -- ASM的兼容性
查看>>
Spark入门实战系列--5.Hive(上)--Hive介绍及部署
查看>>
猫学习IOS(四)UI半小时就搞定Tom猫
查看>>
在GitHub上管理项目
查看>>
tomcat设置web根目录
查看>>
CF 444B(DZY Loves FFT-时间复杂度)
查看>>
OCP-1Z0-051-名称解析-文章12称号
查看>>