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

来源:互联网 发布:无间道3剧情解析 知乎 编辑:程序博客网 时间:2024/05/16 17:37
前面写好了据库操作、实体类有关的属性,这一节写sql语句生成部分首先我编写了一个sql语句生成的接口
public interface GetSql    {        /// <summary>        /// 新增        /// </summary>        /// <typeparam name="T">类名</typeparam>        /// <param name="t">实体类</param>        /// <returns></returns>       List<object> Sava<T>(T t);        /// <summary>        /// 修改        /// </summary>        /// <typeparam name="T">类名</typeparam>        /// <param name="t">实体类</param>        /// <returns></returns>        List<object> Update<T>(T t);        /// <summary>        /// 修改        /// </summary>        /// <typeparam name="T">类名</typeparam>        /// <param name="sql">执行语句</param>        /// <param name="args">参数</param>        /// <returns></returns>        List<object> Update<T>(string sql, params object[] args);        /// <summary>        /// 查询        /// </summary>        /// <typeparam name="T">类名</typeparam>        /// <param name="obj">主键值</param>        /// <returns></returns>        List<object> Query<T>(object obj);        /// <summary>        /// 查询        /// </summary>        /// <typeparam name="T">类名</typeparam>        /// <param name="sql">执行语句</param>        /// <param name="args">参数</param>        /// <returns></returns>        List<object> Query<T>(string sql, params object[] args);        /// <summary>        /// 删除        /// </summary>        /// <typeparam name="T">类名</typeparam>        /// <param name="sql">执行语句</param>        /// <param name="args">参数</param>        /// <returns></returns>        List<object> Delete<T>(string sql, params object[] args);        /// <summary>        /// 分页查询        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="PageCount">行数</param>        /// <param name="PageIndex">当前页码</param>        /// <param name="sql">执行语句</param>        /// <param name="args">参数</param>        /// <returns></returns>        List<object> Page<T>(int PageCount,int PageIndex, string sql, params object[] args);    }

里面的方法大家可以根据自己的需求自由添加,然后我实现了SqlServer的类,由于代码量比较大我就没有一次性发上来了,先实现了新增生成的sql语句的代码

 /// <summary>        /// 生成新增的sql和SqlParameter        /// </summary>        /// <typeparam name="T">对象类型</typeparam>        /// <param name="t">对象</param>        /// <returns></returns>        public List<object> Sava<T>(T t)        {            try            {                object[] objAttrs = null;                List<string> listColumnName = new List<string>();                Type objType = typeof(T);                objAttrs = objType.GetCustomAttributes(typeof(DBAttribute), true);                StringBuilder sb = new StringBuilder();//生成的sql语句                sb.Append("insert into ");                //读取拼接表名                if (objAttrs.Length > 0)                {                    DBAttribute attr = objAttrs[0] as DBAttribute;                    sb.Append(attr != null ? attr.FiledName : objType.Name);                }                else                {                    sb.Append(objType.Name);                }                List<PropertyInfo> pro = objType.GetProperties().ToList();//获取实体类所有公共属性                //获取需要新增的属性                for (int i = 0; i < pro.Count; i++)                {                    objAttrs = pro[i].GetCustomAttributes(typeof(DBAttribute), true);                    if (objAttrs.Length > 0)                    {                        DBAttribute attr = objAttrs[0] as DBAttribute;                        if (attr != null)                        {                            if (attr.FieldProps == "2" || attr.FieldProps == "3")                            {                                pro.Remove(pro[i]);//移除不需要新增的属性                                i--;                            }                        }                    }                }                sb.Append("(");                List<string> list = (from s in pro select s.Name).ToList();                sb.Append(string.Join(",", list));                sb.Append(") values");                sb.Append("(");                list = (from s in pro select "@" + s.Name).ToList();                sb.Append(string.Join(",", list));                sb.Append(")");                SqlParameter[] par = new SqlParameter[pro.Count()];                for (int i = 0; i < par.Length; i++)                {                    par[i] = new SqlParameter("@" + pro[i].Name, (pro[i].GetValue(t, null) == null ? "" : pro[i].GetValue(t, null)).ToString());                }                sb.Append("  select  @@IDENTITY");                return new List<object>() { sb.ToString(), par };            }            catch (Exception ex)            {                throw ;            }        }

第一次写博客,很多地方不懂,欢迎大家批评指正,谢谢!联系QQ:1831996117.加好友注明是博客