C# 反射 增、删、改、查方法

时间:2022-05-20 20:16:00
  /// <summary>
        /// 反射查询方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static List<T> QueryDataMethod<T>(string ID)where T:new()
        {
            //获取Type对象,反射操作基本都是用Type进行的
            Type type = typeof(T);
            string strsql = "select * from @Table where ID=@id";
            SqlParameter[] par = {new SqlParameter("@Table",type.Name),
                  new SqlParameter("@id",ID),
            };
            //调用执行方法
          SqlDataReader dr= DBHelper.ExecuteReader(strsql,par);
            //获取Type对象的所有公共属性
            PropertyInfo[] info = type.GetProperties();
            List<T> modellist = new List<T>();
            //定义泛型对象
            T obj = default(T);
            while (dr.Read())
            {
                obj = new T();
                foreach (PropertyInfo item in info)
                {
                    item.SetValue(obj, dr[item.Name]);
                }
                modellist.Add(obj);
            }
            dr.Close();
            return modellist;
        }
/// <summary>
        /// 反射添加方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="nodel"></param>
        /// <returns></returns>
        public static int AddDataMethod<T>(T nodel) where T : new()
        {
            //获取Type对象,反射操作基本都是用Type进行的
            Type type = typeof(T);
            string strsql = string.Format("insert into {0}", type.Name);
            string column = "(";
            string val = "values(";
            string link = "";
            int index = 0;
            //获取Type对象所有公共属性
            PropertyInfo[] info = type.GetProperties();
            SqlParameter[] p = new SqlParameter[info.Count()];
            foreach (PropertyInfo item in info)
            {
                column += link + item.Name;//定义需要添加的字段
                val += link + " @" + item.Name;//定义字段变量
                //给字段变量赋值
                p[index++] = new SqlParameter("@" + item.Name, item.GetValue(nodel) != null ? item.GetValue(nodel) : DBNull.Value);
                link = ",";
            }
            column += ")";
            val += ")";
            strsql += column + val;
            //调用执行方法
            return DBHelper.ExecuteNonQuery(strsql, p);

        }
 /// <summary>
        /// 反射修改方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="nodel"></param>
        /// <returns></returns>
        public static int UpDataMethod<T>(T nodel,string id) where T : new()
        {
            //获取Type对象,反射操作基本都是用Type进行的
            Type type = typeof(T);
            string strsql = string.Format("update {0} set ", type.Name);
            //获取Type对象所有公共属性
            PropertyInfo[] info = type.GetProperties();
            string link = "";
            foreach (PropertyInfo item in info)
            {
                object val = item.GetValue(nodel);
                if (val != null)
                {
                    //更新修改字段的值
                    strsql += link + item.Name + "='" + val + "'";
                    link = ",";
                }
            }
            strsql += string.Format(" where ID='{0}'", id);
            //调用执行方法
            return DBHelper.ExecuteNonQuery(strsql);

        }
/// <summary>
        /// 反射删除方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static int DelDataMethod<T>(string id) where T : new()
        {
            //获取Type对象,反射操作基本都是用Type进行的
            Type type = typeof(T);
            string strsql = string.Format("delete from  {0} where ID='{1}'", type.Name,id);          
            //调用执行方法
            return DBHelper.ExecuteNonQuery(strsql);

        }
C# 反射 增、删、改、查方法C# 反射 增、删、改、查方法
using System.Windows.Forms;
using System.BLL;
using System.Models;

namespace Personal_Finance
{
    public partial class FormTESt :Form
    {
        public FormTESt()
        {
            InitializeComponent();
        }
        private void button_Click(object sender, EventArgs e)
        {
            //调用查询方法,注意这个方法是后面才改的名字
            List<User> UserList = SystemBll.QueryDataListMethod<User>();

            //调用添加方法
            User user = new User();
            user.user_Name = "小陈";
            user.user_Phone = "13225547985";
            if (SystemBll.AddDataMethod<User>(user) > 0)
                MessageBox.Show("添加成功");
            else
                MessageBox.Show("添加失败");


            //调用修改方法
            user.user_ID = "001";
            user.user_Name = "小李";
            //user是修改对象,user_ID是修改条件
            if (SystemBll.UpdateDataMethod<User>(user, user.user_ID) > 0)
                MessageBox.Show("修改成功");
            else
                MessageBox.Show("修改失败");

            //调用删除方法
            if (SystemBll.DeleteDataMethod<User>(user.user_ID) > 0)
                MessageBox.Show("删除成功");
            else
                MessageBox.Show("删除失败");
        }
      
    }
}
方法调用