使用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
理念:网站优化工具之家致力于面向搜索引擎网站建设,SEO优化标准制定及免费搜索优化工具研发,是宁波首个面向搜索引擎网站服务团队
网站:seo.al0574.com