zoukankan      html  css  js  c++  java
  • 根据实例类型反射操作数据库(简单通用表操作类)

    这个类适用简单的表

    1.有且只有id为主键,

    2.并且实例类主键,也就是id应为字段,其他为属性

    3.实例类名跟表名一样,字段属性跟列名一样

    public class ProType
        {
            public int id;
           
            
            public string type
            {
                get;
                set;
            }
            public int array
            {
                get;
                set;
            }
            public string relyTpye
            {
                get;
                set;
            }
            public string etype
            {
                get;
                set;
            }
        }
    

      下面就是该类的实现

    /// <summary>
        /// 排序枚举
        /// </summary>
        public enum OrderType { asc, desc }
        public class SqlDAL<T> where T : new()
        {
    
    
            private PropertyInfo[] propertys;
            private List<string> nameList;
    
            public SqlDAL()
            {
                T t = new T();
    
                nameList = new List<string>();
                propertys = t.GetType().GetProperties();
    
                //MessageBox.Show(propertys.Length.ToString());
                foreach (var item in propertys)
                {
                    nameList.Add(item.Name);
                }
            }
            /// <summary>
            /// 查询
            /// </summary>
            /// <returns></returns>
            public DataTable Select()
            {
                T t = new T();
                string sql = "select * from " + t.GetType().Name;
                DataTable dt = new DataTable();
                dt = DBHelper.GetInfo(sql);
                return dt;
            }
            /// <summary>
            /// 查询
            /// </summary>
            /// <param name="orderType">排序</param>
            /// <param name="str">排序字段</param>
            /// <returns></returns>
            public DataTable Select(OrderType orderType, params string[] str)
            {
    
                string orderStr = "";
                if (str.Length > 0)
                {
                    orderStr += " order by " + str[0];
                    for (int i = 1; i < str.Length; i++)
                    {
                        orderStr += "," + str[i];
                    }
                    orderStr += " " + orderType.ToString();
                }
                T t = new T();
                string sql = "select * from " + t.GetType().Name + orderStr;
                DataTable dt = DBHelper.GetInfo(sql);
                return dt;
            }
            /// <summary>
            ////// </summary>
            /// <param name="t"></param>
            /// <returns></returns>
            public bool Insert(T t)
            {
                List<SqlParameter> parm = new List<SqlParameter>();
                foreach (var item in propertys)
                {
                    SqlParameter parmitem = new SqlParameter(item.Name, item.GetValue(t, null));
                    parm.Add(parmitem);
                }
                string strName = "";
                string strValue = "";
                strName += nameList[0];
                strValue += "@" + nameList[0];
                for (int i = 1; i < nameList.Count; i++)
                {
                    strName += "," + nameList[i];
                    strValue += ",@" + nameList[i];
                }
                string sql = "insert into " + t.GetType().Name.ToString() + " (" + strName + ") values (" + strValue + ")";
                int isAdd = DBHelper.Commed(sql, parm.ToArray());
    
                if (isAdd > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
    
            }
    
            /// <summary>
            ////// </summary>
            /// <param name="t"></param>
            /// <returns></returns>
            public bool Update(T t)
            {
                List<SqlParameter> parm = new List<SqlParameter>();
                foreach (var item in propertys)
                {
                    SqlParameter parmitem = new SqlParameter(item.Name, item.GetValue(t, null));
                    parm.Add(parmitem);
                }
    
                string str = "";
                str = nameList[0] + "=@" + nameList[0];
                for (int i = 1; i < nameList.Count; i++)
                {
                    str += "," + nameList[i] + "=@" + nameList[i];
                }
    
                string sql = "update " + t.GetType().Name + " set " + str + " where id=@id";
                int isUpdate = DBHelper.Commed(sql, parm.ToArray());
                if (isUpdate > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
    
            }
            /// <summary>
            ////// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public bool Delete(string id)
            {
                T t = new T();
                string sql = "delete from " + t.GetType().Name + " where id=" + id;
                int isDelete = DBHelper.Commed(sql);
                if (isDelete > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
    
            }
        }

    这里之所以有这个类,是因为操作这些表的代码大同小异,甚至可以做出通用任意表,实例类可以用特征类来标识,做出字段与列名的相对应

    但那种太过繁琐,用来实现这些简单表就有点大材小用,所有先弄出了这个类,如果后面有机会再实现以下任意表通用类

  • 相关阅读:
    MVP项目目前已完成:
    MVP项目图:
    团队项目(MVP:新能源汽车无线充电管理网站)——个人任务
    结对项目:黄金点游戏(何珠&赵艳)
    软件工程作业个人项目: wc项目,统计文本文件的字符数、单词数和行数。
    软件工程个人项目:能自动生成小学四则运算题目的程序
    浏览完软件工程教材后,我的五个问题如下
    Async分析
    session
    XML技术
  • 原文地址:https://www.cnblogs.com/lsgsanxiao/p/5732339.html
Copyright © 2011-2022 走看看