.net 简易数据库操作框架1.6

来源:互联网 发布:软件的盈利模式 编辑:程序博客网 时间:2024/06/05 20:14
由于分页部分我还没有想好怎么写,所以暂时不写了,后续会更新。写好生成sql语句的类之后我就写数据库操作接口
public interface DBOperation    {        /// <summary>        /// 新增        /// </summary>        /// <typeparam name="T">类型</typeparam>        /// <param name="t">对象</param>        /// <returns>自增列</returns>        object Sava<T>(T t);        /// <summary>        /// 修改        /// </summary>        /// <typeparam name="T">类型</typeparam>        /// <param name="t">对象</param>        /// <returns>受影响行数</returns>        int Update<T>(T t);        /// <summary>        /// 修改        /// </summary>        /// <typeparam name="T">类型</typeparam>        /// <param name="sql">修改的语句</param>        /// <param name="args">参数</param>        /// <returns>受影响行数</returns>        int Update<T>(string sql, params object[] args);        /// <summary>        /// 查询单个对象        /// </summary>        /// <typeparam name="T">类型</typeparam>        /// <param name="obj">主键值</param>        /// <returns></returns>        T Query<T>(object obj);        /// <summary>        /// 查询        /// </summary>        /// <typeparam name="T">类型</typeparam>        /// <param name="sql">查询的语句</param>        /// <param name="args">参数</param>        /// <returns></returns>        List<T> Query<T>(string sql, params object[] args);        /// <summary>        /// 删除        /// </summary>        /// <typeparam name="T">类型</typeparam>        /// <param name="sql">删除的语句</param>        /// <param name="args">参数</param>        /// <returns>受影响行数</returns>        int Delete<T>(string sql, params object[] args);    }

然后实现SqlServer的方法

 public  class SqlServerOperation : DBOperation    {        public string conSql;        public GetSql get=new GetSqlServer();        public DBHelpercs db=null;        /// <summary>        /// 实例化数据库操作对象        /// </summary>        /// <param name="conSql"></param>        public SqlServerOperation(string conSql)        {            this.conSql = conSql;            db=new SqlHelper(conSql);        }        public object Sava<T>(T t)        {            List<object> list = get.Sava<T>(t);            return db.SingleLine(list[1] as SqlParameter[], list[0].ToString());        }        public int Update<T>(T t)        {            List<object> list = get.Update<T>(t);            return  db.exectue(list[1] as SqlParameter[], list[0].ToString());        }        public int Update<T>(string sql, params object[] args)        {            List<object> list = get.Update<T>(sql,args);            return db.exectue(list[1] as SqlParameter[], list[0].ToString());        }        public T Query<T>(object obj)        {            List<object> list = get.Query<T>(obj);            SqlDataReader reader = db.Query(list[1] as SqlParameter[], list[0].ToString()) as SqlDataReader;            return ReaderToList<T>(reader)[0];        }        public List<T> Query<T>(string sql, params object[] args)        {            List<object> list = get.Query<T>(sql,args);            SqlDataReader reader = db.Query(list[1] as SqlParameter[], list[0].ToString()) as SqlDataReader;            return ReaderToList<T>(reader);        }        public int Delete<T>(string sql, params object[] args)        {            List<object> list = get.Delete<T>(sql, args);            return db.exectue(list[1] as SqlParameter[], list[0].ToString());        }        /// <summary>        /// DataReader转泛型        /// </summary>        /// <typeparam name="T">传入的实体类</typeparam>        /// <param name="objReader">DataReader对象</param>        /// <returns></returns>        public List<T> ReaderToList<T>(IDataReader objReader)        {            using (objReader)            {                List<T> list = new List<T>();                //获取传入的数据类型                Type modelType = typeof(T);                //遍历DataReader对象                while (objReader.Read())                {                    //使用与指定参数匹配最高的构造函数,来创建指定类型的实例                    T model = Activator.CreateInstance<T>();                    for (int i = 0; i < objReader.FieldCount; i++)                    {                        //判断字段值是否为空或不存在的值                        if (!IsNullOrDBNull(objReader[i]))                        {                            //匹配字段名                            PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);                            if (pi != null)                            {                                //绑定实体对象中同名的字段                                  pi.SetValue(model, CheckType(objReader[i], pi.PropertyType), null);                            }                        }                    }                    list.Add(model);                }                return list;            }        }        /// <summary>        /// 对可空类型进行判断转换(*要不然会报错)        /// </summary>        /// <param name="value">DataReader字段的值</param>        /// <param name="conversionType">该字段的类型</param>        /// <returns></returns>        private object CheckType(object value, Type conversionType)        {            if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))            {                if (value == null)                    return null;                System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType);                conversionType = nullableConverter.UnderlyingType;            }            return Convert.ChangeType(value, conversionType);        }        /// <summary>        /// 判断指定对象是否是有效值        /// </summary>        /// <param name="obj"></param>        /// <returns></returns>        private bool IsNullOrDBNull(object obj)        {            return (obj == null || (obj is DBNull)) ? true : false;        }        /// <summary>        /// DataReader转模型        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="objReader"></param>        /// <returns></returns>        public T ReaderToModel<T>(IDataReader objReader)        {            using (objReader)            {                if (objReader.Read())                {                    Type modelType = typeof(T);                    int count = objReader.FieldCount;                    T model = Activator.CreateInstance<T>();                    for (int i = 0; i < count; i++)                    {                        if (!IsNullOrDBNull(objReader[i]))                        {                            PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);                            if (pi != null)                            {                                pi.SetValue(model, CheckType(objReader[i], pi.PropertyType), null);                            }                        }                    }                    return model;                }            }            return default(T);        }    }

到此,我的数据库简易操作框架已经写完了。
第一次写博客,很多地方不懂,欢迎大家批评指正,谢谢!联系QQ:1831996117.加好友注明是博客。如需源码请加好友联系我。