zoukankan      html  css  js  c++  java
  • C#自动装载数据到实体

    这个类可能并没有像你所想的那么灵活,不过能用,欢迎大家提出修改意见

    使用说明:

    项目中的实体类必须和数据库的表结构一样,否则无法正常使用

    在编译环境VS2008 操作系统WIN2003,XP下通过

    调用类的源代码如下:

    //---------------------------------------------------------------------
    // <copyright file="FormartPropty.cs" company="RichCn INC">
    //   Information Contained Herein is Proprietary and Confidential.
    //   Author: 谭辉 (neumik@163.com)
    // </copyright>
    // <summary>
    // 数据动态实体化处理类
    // 开发环境:VS2008
    // 注意事项:定义的实体类的属性名称 必须与数据库字段名一致 否则无法正常使用,可用LINQ TO SQL 或者动软生成器动态生成实体类
    // </summary>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    namespace Common
    {
    public class FormartPropty<T>
    {
    public T obj;
    public FormartPropty(T obj, DataRow row)
    {
    Type type = typeof(T);
    var props = type.GetProperties();
    foreach (var item in props)
    {
    ///如果DataRow里也包括此列
    if (row.Table.Columns.Contains(item.Name))
    {
    ///将DataRow指定列的值赋给value
    object value = row[item.Name];
    ///如果value为null则返回
    if (value == DBNull.Value) continue;
    ///将值做转换
    if (item.PropertyType.Equals(typeof(string)))
    {
    value = row[item.Name].ToString();
    }
    else if (item.PropertyType.Equals(typeof(int)))
    {
    value = Convert.ToInt32(row[item.Name]);
    }
    else if (item.PropertyType.Equals(typeof(decimal)))
    {
    value = Convert.ToDecimal(row[item.Name]);
    }
    else if (item.PropertyType.Equals(typeof(DateTime)))
    {
    value = Convert.ToDateTime(row[item.Name]);
    }
    else if (item.PropertyType.Equals(typeof(double)))
    {
    value = Convert.ToDouble(row[item.Name]);
    }
    else if (item.PropertyType.Equals(typeof(bool)))
    {
    value = Convert.ToBoolean(row[item.Name]);
    }
    ///利用反射自动将value赋值给obj的相应公共属性
    item.SetValue(obj, value, null);
    }
    }
    this.obj = obj;
    }
    }
    }
    

    调用方法:

    假设有个USER类,传入的参数为DATAROw

    FormartPropty<User> fp = new FormartPropty<User>(new User(), vResult.Tables[0].Rows[0]);
    return fp.obj; //fp.obj就是装载完成后的实体
  • 相关阅读:
    Substrings(hdu 4455)
    打砖块(codevs 1257)
    AFO
    愿 你 出 走 半 生 , 归 来 仍 是 少 年
    洛谷 2691逃离
    51Nod 1021 石子归并
    洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
    codevs 2072 分配房间
    codevs 1388 砍树
    codevs 1288 埃及分数
  • 原文地址:https://www.cnblogs.com/neumik/p/2128921.html
Copyright © 2011-2022 走看看