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即可,不需要去修改对应的赋值语句,非常灵活。

时间: 2024-08-11 03:38:24

DataTable中的数据赋值给model z的相关文章

怎样简单灵活地将DataTable中的数据赋值给model

最近在做的一个项目中,有13个方法都需要用到同一种处理方式:通过SQL语句从数据库获取一条指定的数据,并将该数据中的每个值都赋值给一个model,再将这个model中的数据通过微信发送出去.每个方法都会从不同的表中获取数据,需要处理的数据完全不同,因此也对应了13个不同的model.这些model中的每个属性名称是已经给定的,需要将它们post出去,使用微信给定的模板发送消息,因此每个属性的名称必须与微信提供的模板中一致. 下面举个简单的例子来说明当前的情况: SQL Server中用来存放数据

操作DataTable中的数据

在项目中,经常会遇到这样的问题.用SQL从数据库中选出需要的数据存入DataTable之后,需要进行一定的处理之后,才可以用来显示在页面上. 之前对这些问题,都是遇到一个就百度一个,没有系统的处理这些问题,今天就写个文档来处理一下这个问题 先来几个简单的喽. 添加列和行: (既然是整理, 那就写全一点吧,三个方法) #region 方法一: DataTable tblDatas =new DataTable("Datas"); //表名 DataColumn dc =null; dc

c#.net循环将DataGridView中的数据赋值到Excel中,并设置样式

Microsoft.Office.Interop.Excel.Application excel =                new Microsoft.Office.Interop.Excel.Application();            excel.SheetsInNewWorkbook = 1;            excel.Workbooks.Add(); //设置Excel列名            excel.Cells[1, 1] = "学号";     

.Net多个DataTable合并,及过滤掉DataTable中重复数据行

DataTable dt01= new DataTable(); DataTable dt02= new DataTable(); DataTable dtRs = new DataTable(); dt01=sqlHelper.GetDataTable(strSQL001) dt02=sqlHelper.GetDataTable(strSQL002) //数据表dt02与dt01合并 dt01.Merge(dt02); //多个表合并可能产生重复数据,过滤掉重复数据 DataView dv =

使用SqlBulkCopy将DataTable中的数据批量插入数据库中

#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致. /// </summary> /// <param name="conStr">数据库连接串</param> /// <param name="strTableName">数据库中对应的表名</param> //

如何从一个DataTable中复制数据行到另一个DataTable中

DataTable dt = ""; //这里是填充DataTable数据 DataTable dtNew = dt.Copy(); //复制dt表数据结构 dtNew.Clear() //清楚数据 for (int i = 0; i < dt.Rows.Count; i++) { if (条件语句) { dtNew.Rows.Add(dt.Rows[i].ItemArray); //添加数据行 } } ===前提:我们已经有一个DataTable的数据表 现在需要的只是其中的一

C#中,当从数据库中查询到数据,以DataTable类型返回后,如果需要对DataTable中的数据进行筛选,可以选择下面的方式

DataRow[] dr = _deptCodeDt.Select(string.Format(" ward_code = '{0}'", LocalSetting.WardCode)); if (dr.Length <= 0) return; DataTable tempT = new DataTable(); tempT = dr[0].Table.Clone(); //克隆表结构 DataSet tempDs = new DataSet(); tempDs.Tables.A

使用LinQ To Object把数组或DataTable中的数据进行向上汇总

来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=215GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com 最近搞造价系统时遇到一些需要汇总的指标数据 类似下面的结构 指标A     1000    指标B    500    指标C    500 指标A = B+C 当我们需要对这些数值进行校验时,实现的方法有很多种,数据库里写存储过程去更新每行数据, 或者我们在程序中遍历等等,但用起

将DataTable中的数据导出到Excel

1 public static void Export(System.Data.DataTable dt,NPOI.HSSF.UserModel.HSSFWorkbook workbook,string FilePath) 2 { 3 if(dt.Rows.Count == 0) 4 { 5 System.Windows.MessageBox.Show("尚未读取到任何数据"); 6 return; 7 } 8 ISheet sheet = workbook.CreateSheet(&