用反射来实现增删改查语句

  public class OrmHelper
    {
     
        private string constr = "server=.;uid=sa;pwd=1234;database=mySchool00100";  
        private string GetInsert<T>(T t)
        {
            Type t1 = t.GetType();// 获取对应的type 
            var ps = t1.GetProperties();// 获取所有属性
            var fields = string.Join(",", ps.Where(p => p.Name.ToLower() != "id").Select(p => p.Name));
            var values = string.Join(",", ps.Where(p => p.Name.ToLower() != "id").Select(p => "'" + p.GetValue(t) + "'"));
            return string.Format("insert into {0} ({1}) values ({2})", t1.Name, fields, values);
        }

        private string GetSelect<T>()
        {
            Type t1 = typeof(T);// 获取对应的type 
            var ps = t1.GetProperties();// 获取所有属性
            var fields = string.Join(",", ps.Select(p => p.Name));           
            return string.Format("select  {0} from {1}", fields, t1.Name);
        }

        private string GetDelete<T>(T t)
        {
            Type t1 = t.GetType();// 获取对应的type 

            return string.Format("delete from {0} where Id={1}", t1.Name, t1.GetProperty("Id").GetValue(t));
        }

        private string GetUpdate<T>(T t)
        {
            Type t1 = t.GetType();// 获取对应的type 
            var ps = t1.GetProperties();// 获取所有属性
            var fields = string.Join(",", ps.Where(p => p.Name.ToLower() != "id").Select(p => p.Name + "='" + p.GetValue(t) + "'"));

            return string.Format("update {0} set {1} where Id={2} ", t1.Name, fields, t1.GetProperty("Id").GetValue(t));
        }
       

        private int ExecuteNonQuery(string sql)
        {
            using (SqlConnection scon = new SqlConnection(constr))
            {
                scon.Open();
                SqlCommand scom = new SqlCommand(sql, scon);
                int result = scom.ExecuteNonQuery();
                scon.Close();
                return result;
            }
        }
       
        public int Add<T>  (T t) where T : new()
          
        {
            string sql = GetInsert(t);
            return ExecuteNonQuery(sql);
        }

        public int Update<T>(T t) where T : new()
        {
            string sql = GetUpdate(t);
            return ExecuteNonQuery(sql);
        }

        public int Delete<T>(T t) where T : new()
        {
            string sql = GetDelete(t);
            return ExecuteNonQuery(sql);
        }


        public List<T> Select<T>() where T : new()
        {
            List<T> list = new List<T>();
            var Ps = typeof(T).GetProperties();

            string sql = GetSelect<T>();
            using (SqlConnection scon = new SqlConnection(constr))
            {
                scon.Open();
                SqlCommand scom = new SqlCommand(sql, scon);
                SqlDataReader reader = scom.ExecuteReader();
                while (reader.Read())
                {
                    T t1 = new T();
                    foreach (var p in Ps)
                    {
                        p.SetValue(t1, reader[p.Name]);
                    }
                    list.Add(t1);
                }
                reader.Close();
                scon.Close();
                return list;
            }
        }
    }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值