架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 35419|回复: 12

[ASP.NET] [DBHelp]利用反射技术封装对象到List

[复制链接]
发表于 2015-4-20 14:52:57 | 显示全部楼层 |阅读模式
本帖最后由 Delver_Si 于 2015-4-21 16:09 编辑

给我什么类型的实体,返回什么类型的实体集合

  1. //得到一个list<T>
  2.         public static List<T> getList<T>(string strSql)
  3.         {
  4.             List<T> list = new List<T>();

  5.             SqlConnection sqlConn = new SqlConnection(strConn);
  6.             SqlCommand sqlComm = new SqlCommand(strSql, sqlConn);
  7.             sqlConn.Open();
  8.             SqlDataReader sqlDR = sqlComm.ExecuteReader();

  9.             while (sqlDR.Read())
  10.             {
  11.                 //得到T的类型
  12.                 Type t = typeof(T); ;

  13.                 //查看类中的属性:
  14.                 PropertyInfo[] pis = t.GetProperties();
  15.                 // 用反射生成对象
  16.                 T model = Activator.CreateInstance<T>();
  17.                 foreach (PropertyInfo pi in pis)
  18.                 {
  19.                     if (pi!= null)
  20.                     {
  21.                         //取得特定字段并赋值
  22.                         pi.SetValue(model, sqlDR[pi.Name].ToString(), null);
  23.                     }
  24.                     }

  25.                 list.Add(model);
  26.             }
  27.             sqlConn.Close();

  28.             return list;

  29.         }
复制代码

整个DBHelp.cs
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. using System.Reflection;

  8. namespace ManualAssign
  9. {
  10.     public class DBHelp
  11.     {
  12.         //数据库连接字符串
  13.         private static string strConn = "server=.;database=ManualAssign;integrated security=true";

  14.         //得到一个DataTable
  15.         public static DataTable getTable(string strSql)
  16.         {
  17.             SqlConnection sqlConn = new SqlConnection(strConn);
  18.             SqlDataAdapter sqlDA = new SqlDataAdapter(strSql,sqlConn);
  19.             DataTable dt = new DataTable();
  20.             sqlDA.Fill(dt);
  21.             return dt;
  22.         }

  23.         //增删改
  24.         public static void upDateDB(string strSql)
  25.         {
  26.             SqlConnection sqlConn = new SqlConnection(strConn);
  27.             SqlCommand sqlComm = new SqlCommand(strSql, sqlConn);
  28.             sqlConn.Open();
  29.             sqlComm.ExecuteNonQuery();
  30.             sqlConn.Close();
  31.         }


  32.         //得到一个list<T>
  33.         public static List<T> getList<T>(string strSql)
  34.         {
  35.             List<T> list = new List<T>();

  36.             SqlConnection sqlConn = new SqlConnection(strConn);
  37.             SqlCommand sqlComm = new SqlCommand(strSql, sqlConn);
  38.             sqlConn.Open();
  39.             SqlDataReader sqlDR = sqlComm.ExecuteReader();

  40.             while (sqlDR.Read())
  41.             {
  42.                 //得到T的类型
  43.                 Type t = typeof(T); ;

  44.                 //查看类中的属性:
  45.                 PropertyInfo[] pis = t.GetProperties();
  46.                 // 用反射生成对象
  47.                 T model = Activator.CreateInstance<T>();
  48.                 foreach (PropertyInfo pi in pis)
  49.                 {
  50.                     if (pi!= null)
  51.                     {
  52.                         //取得特定字段并赋值
  53.                         pi.SetValue(model, sqlDR[pi.Name].ToString(), null);
  54.                     }
  55.                     }

  56.                 list.Add(model);
  57.             }
  58.             sqlConn.Close();

  59.             return list;

  60.         }

  61.     }
  62. }
复制代码



评分

参与人数 1MB +1 贡献 +1 收起 理由
小渣渣 + 1 + 1 很给力!

查看全部评分





上一篇:锐捷学校网不稳定,经常掉线,我有解决办法!
下一篇:日本开发超高速摄像机
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2015-4-20 15:56:40 | 显示全部楼层
小渣渣 发表于 2015-4-20 15:36
这个叼,晚上我试试,如果有例子就更好了

有例子
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2015-4-20 15:56:38 | 显示全部楼层
小渣渣 发表于 2015-4-20 15:36
这个叼,晚上我试试,如果有例子就更好了

有例子
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2015-8-1 15:57:53 | 显示全部楼层
附一个DBHelp的事务执行代码
sql事务.jpg
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2015-4-20 15:36:14 | 显示全部楼层
这个叼,晚上我试试,如果有例子就更好了
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2015-4-21 16:10:01 | 显示全部楼层
更新了
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2015-4-21 16:50:50 | 显示全部楼层
能上传个压缩包例子吗?
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2015-4-21 21:06:48 | 显示全部楼层
源码

ManualAssign.rar

180.66 KB, 下载次数: 6, 下载积分: 威望 -1 点, 贡献 -1 点

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2015-4-21 21:07:00 | 显示全部楼层
小渣渣 发表于 2015-4-21 16:50
能上传个压缩包例子吗?

发了
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2015-4-22 08:31:39 | 显示全部楼层

好的,我看看
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2015-4-22 10:51:19 | 显示全部楼层

拿走,已说谢谢
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2025-6-17 20:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表