使用C#反射实现数据查询

为什么要这么做

怎么样做

实现学员数据读取

实体类

实体类using System;
using System.Collections.Generic;
using System.Text;

namespace SQLTEST
{

    public class StudentInfo
    {

        public StudentInfo() { }

        #region private 列对象字段

        /// <summary>
        /// StudentId
        /// </summary>
        private int _StudentId;

        /// <summary>
        /// LoginId
        /// </summary>
        private string _LoginId;

        /// <summary>
        /// LoginPwd
        /// </summary>
        private string _LoginPwd;

        /// <summary>
        /// UserStateId
        /// </summary>
        private int _UserStateId;

        /// <summary>
        /// ClassId
        /// </summary>
        private int _ClassId;

        /// <summary>
        /// StudentNO
        /// </summary>
        private string _StudentNO;

        /// <summary>
        /// StudentName
        /// </summary>
        private string _StudentName;

        /// <summary>
        /// Sex
        /// </summary>
        private string _Sex;

        /// <summary>
        /// StudentIDNO
        /// </summary>
        private string _StudentIDNO;

        /// <summary>
        /// Major
        /// </summary>
        private string _Major;

        /// <summary>
        /// SchoolBefore
        /// </summary>
        private string _SchoolBefore;

        /// <summary>
        /// Phone
        /// </summary>
        private string _Phone;

        /// <summary>
        /// Address
        /// </summary>
        private string _Address;

        /// <summary>
        /// PostalCode
        /// </summary>
        private double _PostalCode;

        /// <summary>
        /// CityWanted
        /// </summary>
        private string _CityWanted;

        /// <summary>
        /// JobWanted
        /// </summary>
        private string _JobWanted;

        /// <summary>
        /// Comment
        /// </summary>
        private string _Comment;

        /// <summary>
        /// Email
        /// </summary>
        private string _Email;
        #endregion
       
        #region public 父对象属性

        /// <summary>
        ///StudentId
        /// </summary>
        public int StudentId
        {
            set { _StudentId = value; }
            get { return _StudentId; }
        }


        /// <summary>
        ///LoginId
        /// </summary>
        public string LoginId
        {
            set { _LoginId = value; }
            get { return _LoginId; }
        }


        /// <summary>
        ///LoginPwd
        /// </summary>
        public string LoginPwd
        {
            set { _LoginPwd = value; }
            get { return _LoginPwd; }
        }


        /// <summary>
        ///UserStateId
        /// </summary>
        public int UserStateId
        {
            set { _UserStateId = value; }
            get { return _UserStateId; }
        }


        /// <summary>
        ///ClassId
        /// </summary>
        public int ClassId
        {
            set { _ClassId = value; }
            get { return _ClassId; }
        }


        /// <summary>
        ///StudentNO
        /// </summary>
        public string StudentNO
        {
            set { _StudentNO = value; }
            get { return _StudentNO; }
        }


        /// <summary>
        ///StudentName
        /// </summary>
        public string StudentName
        {
            set { _StudentName = value; }
            get { return _StudentName; }
        }


        /// <summary>
        ///Sex
        /// </summary>
        public string Sex
        {
            set { _Sex = value; }
            get { return _Sex; }
        }


        /// <summary>
        ///StudentIDNO
        /// </summary>
        public string StudentIDNO
        {
            set { _StudentIDNO = value; }
            get { return _StudentIDNO; }
        }


        /// <summary>
        ///Major
        /// </summary>
        public string Major
        {
            set { _Major = value; }
            get { return _Major; }
        }


        /// <summary>
        ///SchoolBefore
        /// </summary>
        public string SchoolBefore
        {
            set { _SchoolBefore = value; }
            get { return _SchoolBefore; }
        }


        /// <summary>
        ///Phone
        /// </summary>
        public string Phone
        {
            set { _Phone = value; }
            get { return _Phone; }
        }


        /// <summary>
        ///Address
        /// </summary>
        public string Address
        {
            set { _Address = value; }
            get { return _Address; }
        }


        /// <summary>
        ///PostalCode
        /// </summary>
        public double PostalCode
        {
            set { _PostalCode = value; }
            get { return _PostalCode; }
        }


        /// <summary>
        ///CityWanted
        /// </summary>
        public string CityWanted
        {
            set { _CityWanted = value; }
            get { return _CityWanted; }
        }


        /// <summary>
        ///JobWanted
        /// </summary>
        public string JobWanted
        {
            set { _JobWanted = value; }
            get { return _JobWanted; }
        }


        /// <summary>
        ///Comment
        /// </summary>
        public string Comment
        {
            set { _Comment = value; }
            get { return _Comment; }
        }


        /// <summary>
        ///Email
        /// </summary>
        public string Email
        {
            set { _Email = value; }
            get { return _Email; }
        }
        #endregion
    }
}

常规方法读取数据

常规方法读取数据using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Reflection;


namespace SQLTEST
{
    class StudentService<T> where T : new()
    {
        #region GetList
        /// <summary>
        /// 获得数据列表
        /// </summary>
        public List<StudentInfo> GetModelList()
        {
            string strSql = "select * from Student";
            List<StudentInfo> modelList = new List<StudentInfo>(0);
            using (SqlConnection conn = new SqlConnection(DBHelper.connString))
            {
                SqlCommand cmd = new SqlCommand(strSql, conn);
                conn.Open();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        StudentInfo model = new StudentInfo();
                        model.StudentId = (reader["StudentId"] != DBNull.Value) ? Convert.ToInt32(reader["StudentId"]) : 0;
                        model.LoginId = (reader["LoginId"] != DBNull.Value) ? Convert.ToString(reader["LoginId"]) : string.Empty;
                        model.LoginPwd = (reader["LoginPwd"] != DBNull.Value) ? Convert.ToString(reader["LoginPwd"]) : string.Empty;
                        model.UserStateId = (reader["UserStateId"] != DBNull.Value) ? Convert.ToInt32(reader["UserStateId"]) : 0;
                        model.ClassId = (reader["ClassId"] != DBNull.Value) ? Convert.ToInt32(reader["ClassId"]) : 0;
                        model.StudentNO = (reader["StudentNO"] != DBNull.Value) ? Convert.ToString(reader["StudentNO"]) : string.Empty;
                        model.StudentName = (reader["StudentName"] != DBNull.Value) ? Convert.ToString(reader["StudentName"]) : string.Empty;
                        model.Sex = (reader["Sex"] != DBNull.Value) ? Convert.ToString(reader["Sex"]) : string.Empty;
                        model.StudentIDNO = (reader["StudentIDNO"] != DBNull.Value) ? Convert.ToString(reader["StudentIDNO"]) : string.Empty;
                        model.Major = (reader["Major"] != DBNull.Value) ? Convert.ToString(reader["Major"]) : string.Empty;
                        model.SchoolBefore = (reader["SchoolBefore"] != DBNull.Value) ? Convert.ToString(reader["SchoolBefore"]) : string.Empty;
                        model.Phone = (reader["Phone"] != DBNull.Value) ? Convert.ToString(reader["Phone"]) : string.Empty;
                        model.Address = (reader["Address"] != DBNull.Value) ? Convert.ToString(reader["Address"]) : string.Empty;
                        model.PostalCode = (reader["PostalCode"] != DBNull.Value) ? Convert.ToDouble(reader["PostalCode"]) : 0;
                        model.CityWanted = (reader["CityWanted"] != DBNull.Value) ? Convert.ToString(reader["CityWanted"]) : string.Empty;
                        model.JobWanted = (reader["JobWanted"] != DBNull.Value) ? Convert.ToString(reader["JobWanted"]) : string.Empty;
                        model.Comment = (reader["Comment"] != DBNull.Value) ? Convert.ToString(reader["Comment"]) : string.Empty;
                        model.Email = (reader["Email"] != DBNull.Value) ? Convert.ToString(reader["Email"]) : string.Empty;
                        modelList.Add(model);
                    }
                    reader.Close();
                }
            }
            return modelList;
        }
        #endregion





    }
}

 

反射方法读取数据

反射方法读取数据using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Reflection;

namespace SQLTEST
{
    class StudentServiceReflection<T> where T : new()
    {
        public List<T> GetModelListRe()
        {
            string strSql = "select * from Student";

            List<T> modelList = new List<T>(0);
            using (SqlConnection conn = new SqlConnection(DBHelper.connString))
            {
                SqlCommand cmd = new SqlCommand(strSql, conn);
                conn.Open();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    T model = new T();
                    while (reader.Read())
                    {
                        foreach (PropertyInfo pi in model.GetType().GetProperties())
                        {
                            if (reader[pi.Name] == DBNull.Value)
                            {
                                continue;
                            }
                            pi.SetValue(model, reader[pi.Name.ToLower()], null);
                        }
                    }
                    reader.Close();
                }
            }
            return modelList;
        }

    }
}

 

测试类

测试类      int count = 5000;
        private void GetList()
        {
            StudentService<StudentInfo> server = new StudentService<StudentInfo>();
            DateTime dts = DateTime.Now;
            for (int i = 0; i < count; i++)
            {
                server.GetModelList();
            }
            DateTime dte = DateTime.Now;
            TimeSpan ts = dte - dts;
            //label1.Text = ts.Milliseconds.ToString();
            Console.WriteLine("常规:\t" + ts.Milliseconds.ToString());
        }
        private void GetListByReflection()
        {
            StudentService<StudentInfo> server = new StudentService<StudentInfo>();

            DateTime dts = DateTime.Now;
            for (int i = 0; i < count; i++)
            {
                server.GetModelList();
            }
            DateTime dte = DateTime.Now;
            TimeSpan ts = dte - dts;
            //label2.Text = ts.Milliseconds.ToString();
            Console.WriteLine("T方法:\t" + ts.Milliseconds.ToString());
        }



        private void button3_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 50; i++)
            {
                Console.WriteLine("第{0}次----------", i);
                GetList();
                GetListByReflection();

            }
        }

 

测试结果

测试结果
第1次
常规:	860
T方法:	715
第2次
常规:	700
T方法:	700
第3次
常规:	685
T方法:	780
第4次
常规:	815
T方法:	775
第5次
常规:	900
T方法:	720
第6次
常规:	695
T方法:	285
第7次
线程 0x16c8 已退出,返回值为 0 (0x0)。
常规:	810
T方法:	910
第8次
常规:	855
T方法:	845
第9次
常规:	860
T方法:	895
第10次
常规:	960
T方法:	90
第11次
常规:	765
T方法:	810
第12次
常规:	790
T方法:	895
第13次
常规:	705
T方法:	825
第14次
常规:	85
T方法:	750
第15次
常规:	710
T方法:	735
第16次
常规:	710
T方法:	710
第17次
常规:	740
T方法:	715
第18次
常规:	735
T方法:	735
第19次
常规:	700
T方法:	735
第20次
常规:	705
T方法:	710
第21次
常规:	735
T方法:	730
第22次
常规:	690
T方法:	745
第23次
常规:	705
T方法:	740
第24次
常规:	705
T方法:	710
第25次
常规:	735
T方法:	705
第26次
常规:	715
T方法:	730
第27次
常规:	705
T方法:	705
第28次
常规:	710
T方法:	705
第29次
常规:	725
T方法:	710
第30次
常规:	705
T方法:	725
第31次
常规:	690
T方法:	705
第32次
常规:	720
T方法:	715
第33次
常规:	700
T方法:	710
第34次
线程 0x1504 已退出,返回值为 0 (0x0)。
常规:	695
T方法:	820
第35次
常规:	790
T方法:	855
第36次
常规:	845
T方法:	820
第37次
常规:	765
T方法:	0
第38次
常规:	885
T方法:	980
第39次
常规:	830
T方法:	715
第40次
常规:	870
T方法:	785
第41次
常规:	780
T方法:	790
第42次
常规:	705
T方法:	805
第43次
常规:	785
T方法:	770
第44次
常规:	865
T方法:	795
第45次
常规:	755
T方法:	840
第46次
常规:	820
T方法:	880
第47次
常规:	965
T方法:	980
第48次
常规:	950
T方法:	810
第49次
常规:	840
T方法:	85

转载于:https://www.cnblogs.com/yaoshiyou/archive/2009/11/28/1612842.html

private void btnCreateEntity_Click(object sender, EventArgs e) { HeaderOfEntity HeaderOfEntity = new HeaderOfEntity(); DataTable dt = new DataTable(); #region 实例化一个实体,并为这个实体类赋值 //实体类名不能为空 if (txtClassName.Text == "") { MessageBox.Show("类名不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { HeaderOfEntity.ClassName = txtClassName.Text.Trim(); } //实体类的说明 if (txtClassExplain.Text != "") { HeaderOfEntity.ClassExplain = txtClassExplain.Text.Trim(); } else { HeaderOfEntity.ClassExplain = ""; } //实体类的作者 if (txtAuthor.Text != "") { HeaderOfEntity.ClassAuthor = txtAuthor.Text.Trim(); } else { HeaderOfEntity.ClassAuthor = ""; } //类的命名空间 if (txtNamespace.Text != "") { HeaderOfEntity.NameSpace = txtNamespace.Text.Trim(); } else { HeaderOfEntity.NameSpace = ""; } #endregion #region 将dataGridView中的数据复制出来,复制到DataTable中,做为参数 //添加列 for (int i = 0; i < dgvAttribute.Columns.Count; i++) { dt.Columns.Add(dgvAttribute.Columns[i].Name); } //添加行 for (int j = 0; j < dgvAttribute.Rows.Count; j++) { DataRow dr = dt.NewRow(); for (int k = 0; k < dgvAttribute.Columns.Count; k++) { dr[k] = dgvAttribute.Rows[j].Cells[k].Value; } dt.Rows.Add(dr); } #endregion string strFileName = "\\" + txtClassName.Text + ".cs"; //实例化一个接口对象 IWriteEntity writeEntity = new WriteEntity(); string strPath = "../../CreateClass"; FileStream fs; if (!File.Exists(strPath + strFileName)) { fs = new FileStream(strPath + strFileName, FileMode.Create,FileAccess.Write); } else { fs = new FileStream(strPath + strFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); } if (writeEntity.Write(fs, dt, HeaderOfEntity) == true) { MessageBox.Show("写入文件成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("写入文件失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值