DataTable中的数据赋值给model z
create table memberinfo
(
member_id int,
member_name varchar(20),
member_birthday varchar(50)
)
go
/// <summary>
/// 微信消息中的参数
/// </summary>
public class wechatouputpara
{
private String _name = "";
/// <summary>
/// 会员姓名
/// </summary>
public String name
{
get { return _name ; }
set { _name = value; }
} private String _birthday= "";
/// <summary>
/// 会员生日
/// </summary>
public String birthday
{
get { return _birthday; }
set { _birthday= value; }
}
}
需要达到的最终效果:将数据库memberinfo表中的一条会员信息获取出来,并将姓名member_name赋值给wechatouputpara类的name属性,将生日member_birthday赋值给birthday属性。
既然有很多方法都需要用同一种方式处理,那么自然而然要想到有没有一种能够公用的方法,一劳永逸。毕竟每个表的结构是不同的,传回的数据可能多达十几二十 几个字段,如果每个方法中,都要将表中每个字段的值依次赋值给model中的对应属性,那么工作量和代码量都会非常大。
我的解决办法如下:
(1)通过SQL语句从表中获取数据时,将每个字段转换为与model中的对应属性相同的名称。
(2)写一个方法,能够将DataTable表中的每一个字段赋值给model中与其名称相同的属性。
(3)使用泛型,将这个方法作为一个公用方法,每个数据表向对应model中赋值时,都可以调用这个方法。
接下来,仍然使用上面列出的简单例子,来说明最终的解决方案。
(1)使用SQL语句获取数据:
select member_name as [name],member_birthday as birthday from memberinfo where member_id = 1
在代码中,获取到的数据被存到DataTable dtInfo中。
(2)写一个公用方法,实现:将DataTable表中的每一个字段赋值给model中与其名称相同的属性。
/// <summary>
/// 将DataTable中的每一列赋值给model中的同名属性
/// DataTable中只有一行数据
/// </summary>
/// <typeparam name="T">泛型:model的类型</typeparam>
/// <param name="objmodel">model的实例</param>
/// <param name="dtInfo">DataTable表</param>
public void TableToModel<T>(T objmodel, DataTable dtInfo)
{
//获取model的类型
Type modelType = typeof(T); //获取model中的属性
PropertyInfo[] modelpropertys = modelType.GetProperties(); //遍历DataTable的每一列
for (Int32 i = 0; i < dtInfo.Columns.Count; i++)
{
//遍历model的每一个属性
foreach (PropertyInfo pi in modelpropertys)
{
String name = pi.Name; //获取属性名称
//若model属性名称与表中的列名相同
if (name == dtInfo.Columns[i].ColumnName)
{
//获取表中该列对应的数据
object value = dtInfo.Rows[0][i].ToString();
//将表中该列下的数据赋值给model中的同名属性
modelType.GetProperty(name).SetValue(objmodel, value, null);
}
}
}
}
(3)在代码中调用公用方法,将DataTable dtInfo中的数据赋值给wechatouputpara类。
//输出参数
wechatouputpara objwechatouputpara = new wechatouputpara(); //将会员信息赋值给输出参数
TableToModel<wechatouputpara>(objwechatouputpara, dtInfo);
问题解决了,13个类似的方法都可以直接一句话调用这个公用方法,就可以完成赋值操作,是不是简单多了呢?并且,如果数据表的结构发生变化,或者微信消息 需要添加、删除参数,只需要修改SQL语句和对应的model即可,不需要去修改对应的赋值语句,非常灵活。
DataTable中的数据赋值给model z的更多相关文章
- 怎样简单灵活地将DataTable中的数据赋值给model
最近在做的一个项目中,有13个方法都需要用到同一种处理方式:通过SQL语句从数据库获取一条指定的数据,并将该数据中的每个值都赋值给一个model,再将这个model中的数据通过微信发送出去.每个方法都 ...
- DataTable数据赋值给Model通用方法
注:该文属本人原创,今后项目中发现该方法存在BUG会实时更新,转载记得附上原文出处,方便大家获得最新代码. 相信大家在做项目中,经常会根据不同的表new各种不同的Model,当需要对Model进行实例 ...
- c#.net循环将DataGridView中的数据赋值到Excel中,并设置样式
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel ...
- 从DataTable中查询数据
/// <summary> /// 从DataTable中查询数据 /// </summary> /// <param name="tb">待处 ...
- SqlBulkCopy将DataTable中的数据批量插入数据库中
#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...
- 【转载】C#中遍历DataTable中的数据行
在C#中的Datatable数据变量的操作过程中,有时候我们需要遍历DataTable变量获取每一行的数据值,例如将DataTable变量转换为List集合的时候,我们就会遍历DataTable变量, ...
- list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库
/// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...
- 弹框勾选datatable中的数据,点击保存后添加到另一个表中,同一个页面
需求描述:做编辑的时候,点击添加按钮,弹出数据表table2,勾选弹出框中的数据,点击保存后能够添加到table1中,并且已经被添加到table1中的数据,在弹出框中显示已选,checkbox隐藏:t ...
- C#如何对DataTable中的数据进行条件搜索
经常遇到将数据库中的数据读取到DataTable中的时候再次对DataTable进行条件筛选,下面的筛选的一个例子: DataRow[] dr = dt.Select("token = '& ...
随机推荐
- 100 open source Big Data architecture papers for data professionals
zhuan :https://www.linkedin.com/pulse/100-open-source-big-data-architecture-papers-anil-madan Big Da ...
- python模块结构和布局
用模块来合理的组织你的python代码是简单又自然的方法.下面介绍一种非常合理的布局: #(1)起始行(Unix) #(2)模块文档 #(3)模块导入 #(4)变量定义 #(5)类定义 #(6)函数定 ...
- 配置 Hdp 4 Window 中的一些问题
1,E0508: User [?] not authorized for WF job [-- jobid] 很明显验证问题, 修改 oozie-site.xml中节点为 <property&g ...
- linux包之nc之nc命令
nc-1.84-22.el6.x86_64不用系统上提供的nc版本会有所不同,其提供的参数使用方法也略有差异 nc -v -w 1 192.168.2.10 -z 1-65535|grep succe ...
- shell之echo与printf和颜色
在用户的bashrc中添加一行export来修改提示符.
- unity, monodevelop 不安全的代码只会在使用/unsafe编译的情况下出现
http://blog.sina.com.cn/s/blog_6b3661a90102wx2g.html
- PouchDB:可随时同步的开源JavaScript数据库
PouchDB是一个开源的JavaScript数据库,可以运行在浏览器中.PouchDB的数据存储.处理方式受到了Apache CouchDB的启发(CouchDB是一个面向文档的数据库,可通过Jav ...
- 移动web 应用开发调试
调试前端页面我一直使用着神器Chrome开发人员工具, 那个方便, 大家都懂的. 但当我们要调试为移动设备设计的Web页面时, 是不是觉得有点力不从心了?平时开发时我们可以一直都是在桌面调试这个页面, ...
- Ueditor 标签被过滤
1:将allowDivTransToP设置为false 2:将root.traversal方法中的switch注释
- SQL常见的可优化点
# 索引相关 # ################################################### 1. 查询(或更新,删除,可以转换为查询)没有用到索引 这是最基础的步骤,需要 ...