C#数据库访问(GenericDao)

http://write.blog.csdn.net/postedit

/************************************
 版权所有:SkylineSoft版权所有(C)
 创建日期:2010-8-13
 作  者:天涯居士
 电子邮件:Jiangwzh@163.com

 系统名称:数据库访问层
 模块名称:通用数据访问
 内容摘要:提供数据库访问的通用方法
 ***********************************/
 using System;
 using System.Collections.Generic;
 using System.Text;
 using System.Data;
 using System.Data.Common;
 using System.Configuration;
 using System.Reflection;
 using SkylineSoft.Utils;
 using SkylineSoft.DAL.Utils;
 
namespace SkylineSoft.DAL
 {
     public delegate void DbDataReaderHandler(DbDataReader reader);
 
    public class GenericDao:IDisposable
     {
         #region 常数定义
         /// <summary>
         /// 默认数据库连接设置关键字
         /// </summary>
         public const string DEFAULT_CONNECTIONSETTING_KEY = "Default_Connection";
         #endregion
 
        #region 公共属性
         /// <summary>
         /// 连接字符串
         /// </summary>
         public string ConnectionString { get; set; }
 
        /// <summary>
         /// 数据提供者名称
         /// </summary>
         public string ProviderName { get; set; }
         #endregion
 
        #region 私有属性
         /// <summary>
         /// 数据提供者工厂
         /// </summary>
         private DbProviderFactory ProviderFactory
         {
             get { return DbProviderFactories.GetFactory(this.ProviderName); }
         }
 
        /// <summary>
         /// 数据库事务
         /// </summary>
         private DbTransaction Transaction { get; set; }
 
        /// <summary>
         /// 数据库连接
         /// </summary>
         private DbConnection Connection { get; set; }
         #endregion
        
         #region 构造函数
         /// <summary>
         /// 构造函数
         /// 使用应用程序默认配置文件,及默认连接设置
         /// </summary>
         public GenericDao()
             : this(DEFAULT_CONNECTIONSETTING_KEY)
         {
         }
 
        /// <summary>
         /// 构造函数
         /// 用应用程序默认配置文件
         /// </summary>
         /// <param name="settingKey">连接设置关键字</param>
         public GenericDao(string settingKey)
         {
             ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings[settingKey];
             this.ConnectionString = settings.ConnectionString;
             this.ProviderName = settings.ProviderName;
         }
 
        /// <summary>
         /// 构造函数
         /// 指定配置文件,使用其中的默认连接设置
         /// </summary>
         /// <param name="config">配置对象</param>
         public GenericDao(Configuration config)
             : this(config, DEFAULT_CONNECTIONSETTING_KEY)
         {
            
         }
 
        /// <summary>
         /// 构造函数
         /// 指定配置文件及连接设置关键字
         /// </summary>
         /// <param name="config">配置对象</param>
         /// <param name="settingKey">连接设置关键字</param>
         public GenericDao(Configuration config, string settingKey)
         {
             ConnectionStringSettings settings = config.ConnectionStrings.ConnectionStrings[settingKey];
             this.ConnectionString = settings.ConnectionString;
             this.ProviderName = settings.ProviderName;
         }
 
        /// <summary>
         /// 构造函数
         /// </summary>
         /// <param name="connectionString">连接字符串</param>
         /// <param name="providerName">数据提供者名称</param>
         public GenericDao(string connectionString, string providerName)
         {
             this.ConnectionString = connectionString;
             this.ProviderName = providerName;
         }
         #endregion
 
        #region 打开关闭数据库连接
         /// <summary>
         /// 打开数据连接
         /// </summary>
         public void Open()
         {
             if (this.Connection == null)
             {
                 this.Connection = this.ProviderFactory.CreateConnection();
                 this.Connection.ConnectionString = this.ConnectionString;
             }
 
            if (this.Connection.State != ConnectionState.Open)
                 this.Connection.Open();
         }
 
        /// <summary>
         /// 关闭数据连接
         /// </summary>
         public void Close()
         {
             //如果有事务,则提交
             if (this.Transaction != null)
             {
                 try
                 {
                     CommitTransaction();
                 }
                 catch { }
             }
             //关闭数据连接
             if (this.Connection!=null && this.Connection.State == ConnectionState.Open)
             {
                 try
                 {
                     this.Connection.Close();
                 }
                 catch { }
                 finally
                 {
                     this.Connection = null;
                 }
             }
         }
         #endregion
 
        #region 事务
         /// <summary>
         /// 开始事务
         /// </summary>
         public void BeginTransaction()
         {
             this.Open();
             this.Transaction = this.Connection.BeginTransaction();
         }
 
        /// <summary>
         /// 提交事务
         /// </summary>
         public void CommitTransaction()
         {
             if (this.Transaction != null)
             {
                 try
                 {
                     this.Transaction.Commit();
                 }
                 catch (Exception ex)
                 {
                     try
                     {
                         this.Transaction.Rollback();
                     }
                     catch { };
                     throw new DaoException("提交事务产生异常,事务已经回滚!",ex);
                 }
                 finally
                 {
                     this.Transaction = null;
                 }
             }
             else
                 throw new DaoException("没有要提交的事务!");
 
        }
         #endregion
 
        #region 执行非查询SQL
         /// <summary>
         /// 执行非查询SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <returns>影响的行数</returns>
         public int ExecuteNonQuery(string sql)
         {
             return ExecuteNonQuery(CommandType.Text, sql, null);
         }
 
        /// <summary>
         /// 执行非查询SQL
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <returns>影响的行数</returns>
         public int ExecuteNonQuery(CommandType commandType, string sql)
         {
             return ExecuteNonQuery(commandType, sql, null);
         }
 
        /// <summary>
         /// 执行非查询SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <returns>影响的行数</returns>
         public int ExecuteNonQuery(string sql, Dictionary<string, object> parameters)
         {
             return ExecuteNonQuery(CommandType.Text, sql, parameters);
         }
 
        /// <summary>
         /// 执行非查询SQL
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <returns>影响的行数</returns>
         public int ExecuteNonQuery(CommandType commandType, string sql, Dictionary<string, object> parameters)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, parameters);
             return command.ExecuteNonQuery();
         }
 
        /// <summary>
         /// 执行非查询SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="paramObject">参数对象</param>
         /// <returns>影响的行数</returns>
         public int ExecuteNonQuery(string sql, object paramObject)
         {
             return ExecuteNonQuery(CommandType.Text, sql, paramObject);
         }
 
        /// <summary>
         /// 执行非查询SQL
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="paramObject">参数对象</param>
         /// <returns>影响的行数</returns>
         public int ExecuteNonQuery(CommandType commandType, string sql, object paramObject)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, paramObject);
             return command.ExecuteNonQuery();
         }
         #endregion
 
        #region 执行查询SQL
         /// <summary>
         /// 执行查询SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <returns>DbDataReader</returns>
         public DbDataReader ExecuteReader(string sql)
         {
             return ExecuteReader(CommandType.Text, sql, null);
         }
 
        /// <summary>
         /// 执行查询SQL
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <returns>DbDataReader</returns>
         public DbDataReader ExecuteReader(CommandType commandType, string sql)
         {
             return ExecuteReader(commandType, sql, null);
         }
 
        /// <summary>
         /// 执行查询SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <returns>DbDataReader</returns>
         public DbDataReader ExecuteReader(string sql, Dictionary<string, object> parameters)
         {
             return ExecuteReader(CommandType.Text, sql, parameters);
         }
 
        /// <summary>
         /// 执行查询SQL
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <returns>DbDataReader</returns>
         public DbDataReader ExecuteReader(CommandType commandType, string sql, Dictionary<string, object> parameters)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, parameters);
             return command.ExecuteReader();
         }
 
        /// <summary>
         /// 执行查询SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="paramObject">参数对象</param>
         /// <returns>DbDataReader</returns>
         public DbDataReader ExecuteReader(string sql, object paramObject)
         {
             return ExecuteReader(CommandType.Text, sql, paramObject);
         }
 
        /// <summary>
         /// 执行查询SQL
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="paramObject">参数对象</param>
         /// <returns>DbDataReader</returns>
         public DbDataReader ExecuteReader(CommandType commandType, string sql, object paramObject)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, paramObject);
             return command.ExecuteReader();
         }
 

        /// <summary>
         /// 执行查询SQL(并由处理器处理)
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <returns>DbDataReader</returns>
         public void ExecuteReader(DbDataReaderHandler handler,string sql)
         {
             ExecuteReader(CommandType.Text, sql, null, handler);
         }
 
        /// <summary>
         /// 执行查询SQL(并由处理器处理)
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <returns>DbDataReader</returns>
         public void ExecuteReader(DbDataReaderHandler handler,CommandType commandType, string sql)
         {
             ExecuteReader(commandType, sql, null, handler);
         }
 
        /// <summary>
         /// 执行查询SQL(并由处理器处理)
         /// </summary>
         /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <returns>DbDataReader</returns>
         public void ExecuteReader(string sql, Dictionary<string, object> parameters, DbDataReaderHandler handler)
         {
             ExecuteReader(CommandType.Text, sql, parameters, handler);
         }
 
        /// <summary>
         /// 执行查询SQL(并由处理器处理)
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <returns>DbDataReader</returns>
         public void ExecuteReader(CommandType commandType, string sql, Dictionary<string, object> parameters, DbDataReaderHandler handler)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, parameters);
             DbDataReader reader = command.ExecuteReader();
             while (reader.Read())
             {
                 handler(reader);
             }
         }
 
        /// <summary>
         /// 执行查询SQL(并由处理器处理)
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="paramObject">参数对象</param>
         /// <returns>DbDataReader</returns>
         public void ExecuteReader(string sql, object paramObject, DbDataReaderHandler handler)
         {
             ExecuteReader(CommandType.Text, sql, paramObject, handler);
         }
 
        /// <summary>
         /// 执行查询SQL(并由处理器处理)
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="paramObject">参数对象</param>
         /// <returns>DbDataReader</returns>
         public void ExecuteReader(CommandType commandType, string sql, object paramObject, DbDataReaderHandler handler)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, paramObject);
            
             DbDataReader reader= command.ExecuteReader();
             try
             {
                 while (reader.Read())
                 {
                     handler(reader);
                 }
             }
             finally
             {
                 if (reader != null && !reader.IsClosed)
                     reader.Close();
             }
         }
         #endregion
 
        #region 执行纯量(Scalar)SQL
         /// <summary>
         /// 执行纯量查询SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <returns>纯量值</returns>
         public T ExecuteScalar<T>(string sql)
         {
             return ExecuteScalar<T>(CommandType.Text, sql, null);
         }
 
        /// <summary>
         /// 执行纯量SQL
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <returns>纯量值</returns>
         public T ExecuteScalar<T>(CommandType commandType, string sql)
         {
             return ExecuteScalar<T>(commandType, sql, null);
         }
 
        /// <summary>
         /// 执行纯量SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <returns>纯量值</returns>
         public  T ExecuteScalar<T>(string sql, Dictionary<string, object> parameters)
         {
             return  ExecuteScalar<T>(CommandType.Text, sql, parameters);
         }
 
        /// <summary>
         /// 执行纯量SQL
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <returns>纯量值</returns>
         public  T ExecuteScalar<T>(CommandType commandType, string sql, Dictionary<string, object> parameters)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, parameters);
 
            object obj = command.ExecuteScalar();
             return obj == DBNull.Value ? default(T) : (T)Convert.ChangeType(obj, typeof(T));
         }
 
        /// <summary>
         /// 执行纯量SQL
         ///
        /// 默认为CommandText类型
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="paramObject">参数对象</param>
         /// <returns>纯量值</returns>
         public  T ExecuteScalar<T>(string sql, object paramObject)
         {
             return  ExecuteScalar<T>(CommandType.Text, sql, paramObject);
         }
 
        /// <summary>
         /// 执行纯量SQL
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="paramObject">参数对象</param>
         /// <returns>纯量值</returns>
         public  T ExecuteScalar<T>(CommandType commandType, string sql, object paramObject)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, paramObject);
 
            object obj = command.ExecuteScalar();
             return obj == DBNull.Value ? default(T) : (T)Convert.ChangeType(obj, typeof(T));
         }
         #endregion
 
        #region Fill
         /// <summary>
         /// 填充数据集
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="dataSet">数据集</param>
         public void Fill(string sql,DataSet dataSet)
         {
             Fill(CommandType.Text, sql, null, dataSet);
         }
 
        /// <summary>
         /// 填充数据集
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="dataSet"></param>
         public void Fill(CommandType commandType,string sql, DataSet dataSet)
         {
             Fill(commandType, sql, null, dataSet);
         }
 
        /// <summary>
         /// 填充数据集
         /// </summary>
         /// <param name="sql">SQL语句<</param>
         /// <param name="parameters">参数字典</param>
         /// <param name="dataSet">数据集</param>
         public void Fill(string sql, Dictionary<string, object> parameters, DataSet dataSet)
         {
             Fill(CommandType.Text,sql,parameters,dataSet);
         }
 
        /// <summary>
         /// 填充数据集
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">参数字典</param>
         /// <param name="dataSet">数据集</param>
         public void Fill(CommandType commandType, string sql, Dictionary<string, object> parameters, DataSet dataSet)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, parameters);
             DbDataAdapter dataAdapter = this.ProviderFactory.CreateDataAdapter();
             dataAdapter.SelectCommand=command;
             dataAdapter.Fill(dataSet);
         }
 
        /// <summary>
         /// 填充数据集
         /// </summary>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">对数对象</param>
         /// <param name="dataSet">数据集</param>
         public void Fill(string sql, object parameters, DataSet dataSet)
         {
             Fill(CommandType.Text, sql, parameters, dataSet);
         }
 
        /// <summary>
         /// 填充数据集
         /// </summary>
         /// <param name="commandType">Command类型</param>
         /// <param name="sql">SQL语句</param>
         /// <param name="parameters">对数对象</param>
         /// <param name="dataSet">数据集</param>
         public void Fill(CommandType commandType, string sql, object parameters, DataSet dataSet)
         {
             this.Open();
             DbCommand command = DBUtil.CreateCommand(this.ProviderFactory, this.Connection, commandType, sql, parameters);
             DbDataAdapter dataAdapter = this.ProviderFactory.CreateDataAdapter();
             dataAdapter.SelectCommand = command;
             dataAdapter.Fill(dataSet);
         }
         #endregion
 
        #region Entity
         /// <summary>
         /// 插入实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <typeparam name="K">主键类模析</typeparam>
         /// <param name="entity">实体</param>
         /// <returns>主键</returns>
         public  K Insert<T, K>(T entity)
         {
             //检测实体有效性
             EntityUtil.CheckEntityValid(typeof(T));
 
            EntityAttribute attribute = EntityUtil.GetEntityClassAttribute(typeof(T));
             PropertyInfo priInfo = EntityUtil.GetEntityPrimaryFieldProperty(typeof(T));
             PropertyInfo[] nopriInfos = EntityUtil.GetEntityNoPrimaryFieldProperties(typeof(T));
 
            string sql = SqlBuilder.GetInsertSql(typeof(T));
 
            Dictionary<string, object> parameters = new Dictionary<string, object>();
             foreach (PropertyInfo pInfo in nopriInfos)
             {
                 string columnName = EntityUtil.GetEntityFieldName(pInfo);
                 parameters.Add(columnName, pInfo.GetValue(entity, null) ?? DBNull.Value);
 
            }
 
            PrimaryKeyStrategy strategy = PrimaryKeyStrategy.Identity;
             if (attribute != null)
                 strategy = attribute.PrimaryKeyStrategy;
             if (strategy != PrimaryKeyStrategy.Identity)
             {
                 string columnName = EntityUtil.GetEntityFieldName(priInfo);
                 if (strategy == PrimaryKeyStrategy.Guid)
                     parameters.Add(columnName, System.Guid.NewGuid().ToString());
                 else
                     parameters.Add(columnName, priInfo.GetValue(entity, null) ?? DBNull.Value);
             }
 
            if (this.ExecuteNonQuery(sql, parameters) > 0)
             {
                 if (strategy == PrimaryKeyStrategy.Identity)
                     return this.ExecuteScalar<K>("SELECT @@identity");
                 else
                 {
                     object obj= priInfo.GetValue(entity, null);
                     return obj == null ? default(K) : (K)obj;
                 }
             }
             return default(K);
         }
 
        /// <summary>
         /// 更新实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <param name="entity">实体</param>
         /// <returns>是否成功更新</returns>
         public  bool Update<T>(T entity)
         {
             //检测实体有效性
             EntityUtil.CheckEntityValid(typeof(T));
 
            EntityAttribute attribute = EntityUtil.GetEntityClassAttribute(typeof(T));
             PropertyInfo[] pInfos = EntityUtil.GetEntityFieldProperties(typeof(T));
 
            string sql = SqlBuilder.GetUpdateSql(typeof(T));
 
            Dictionary<string, object> parameters = new Dictionary<string, object>();
             foreach (PropertyInfo pInfo in pInfos)
             {
                 string columnName = EntityUtil.GetEntityFieldName(pInfo);
                 parameters.Add(columnName, pInfo.GetValue(entity, null) ?? DBNull.Value);
 
            }
             if (this.ExecuteNonQuery(sql, parameters) > 0)
                 return true;
             else
                 return false;
         }
 
        /// <summary>
         /// 删除实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <typeparam name="K">主键类模板</typeparam>
         /// <param name="key">主键值</param>
         /// <returns>是否成功删除</returns>
         public  bool Delete<T>(object keyValue)
         {
             //检测实体有效性
             EntityUtil.CheckEntityValid(typeof(T));
 
            string sql = SqlBuilder.GetSingleDeleteSql(typeof(T));
             Dictionary<string, object> parameters = new Dictionary<string, object>();
             parameters.Add(EntityUtil.GetEntityPrimaryFieldName(typeof(T)), keyValue);
             if(this.ExecuteNonQuery(sql, parameters)>0)
                 return true;
             else
                return false;
         }
 
        /// <summary>
         /// 删除满足条件的实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <param name="where">Where表达式</param>
         /// <param name="parameters">参数类</param>
         /// <returns>影响行数</returns>
         public  int Delete<T>(string where, object parameters)
         {
             string sql = SqlBuilder.GetDeleteSql(typeof(T),where);
             return this.ExecuteNonQuery(sql, parameters);
         }
 
        /// <summary>
         /// 获取实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <typeparam name="K">主键类模板</typeparam>
         /// <param name="key">主键值</param>
         /// <returns>实体</returns>
         public  T Get<T>(object keyValue) where T:new()
         {
             //检测实体有效性
             EntityUtil.CheckEntityValid(typeof(T));
 
            string sql = SqlBuilder.GetSingleSelectSql(typeof(T));
             Dictionary<string, object> parameters = new Dictionary<string, object>();
             parameters.Add(EntityUtil.GetEntityPrimaryFieldName(typeof(T)), keyValue);
 
            DbDataReader reader= this.ExecuteReader(sql, parameters);
             try
             {
                 if (reader.Read())
                 {
                     return EntityUtil.Read<T>(reader);
                 }
             }
             finally
             {
                 if (reader != null && !reader.IsClosed)
                     reader.Close();
             }
             return default(T);
         }
 
        /// <summary>
         /// 获取所有实体
         /// </summary>
         /// <typeparam name="T">实体类模板<</typeparam>
         /// <returns>所有实体</returns>
         public  List<T> GetAll<T>() where T:new()
         {
             return Select<T>(null, null, null);
         }
 
        /// <summary>
         ///  获取满足条件的实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <param name="where">条件表达式</param>
         /// <param name="parameters">参数对象</param>
         /// <returns>满足条件的实体集合</returns>
         public List<T> Select<T>(string where, object parameters) where T : new()
         {
             return Select<T>(where, parameters, null);
         }
 

        /// <summary>
         ///  获取满足条件的实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <param name="where">条件表达式</param>
         /// <param name="parameters">参数对象</param>
         /// <returns>满足条件的实体集合</returns>
         public List<T> Select<T>(string where, Dictionary<string,object> parameters) where T : new()
         {
             return Select<T>(where, ReflectionUtil.ToDictionary(parameters), null);
         }
 
        /// <summary>
         /// 获取满足条件的实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <param name="where">条件表达式</param>
         /// <param name="parameters">参数对象</param>
         /// <param name="order">排序表达式</param>
         /// <returns>满足条件的实体集合</returns>
         public List<T> Select<T>(string where, object parameters, string order) where T:new()
         {
             return Select<T>(where, ReflectionUtil.ToDictionary(parameters), order);
         }
 
        /// <summary>
         /// 获取满足条件的实体
         /// </summary>
         /// <typeparam name="T">实体类模板</typeparam>
         /// <param name="where">条件表达式</param>
         /// <param name="parameters">参数字典</param>
         /// <param name="order">排序表达式</param>
         /// <returns>满足条件的实体集合</returns>
         public List<T> Select<T>(string where, Dictionary<string,object> parameters, string order) where T : new()
         {
             string sql = SqlBuilder.GetSelectSql(typeof(T), where, order);
 
            List<T> lst = new List<T>();
             this.ExecuteReader(sql, parameters, reader =>
             {
                 lst.Add(EntityUtil.Read<T>(reader));
             });
             return lst;
         }
 
        #endregion
 
        #region 实现IDisposable
         public void Dispose()
         {
             this.Close();
         }
         #endregion
 
    }
 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值