网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 C#利用反射简化给类字段赋值
内容
    这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值
    1.类的定义
    namespace CCB_Donet.ClassFolder
    {
    public class FieldRuleInfo
    {
    public string gStrFNo;
    public string gStrFName;
    public string gStrFLock;
    public string gStrFCaption;
    public string gStrFType;
    public string gStrFMust;
    public string gStrFMin;
    public string gStrFMax;
    public string gStrFDefault;
    public string gStrFDate;
    public string gStrFDB;
    public string gStrFAllow;
    public string gStrFDisallow;
    public string gStrFSB;
    public string gStrFBig;
    public string gStrFSmall;
    public string gStrFInputMethod;
    public string gStrFCHK;
    public string gStrFRelation;
    public string gStrFDesc;
    public string gStrFSecond;
    public string gStrFQC;
    public string gStrFException;
    public string gStrFASupp;
    public string gStrFYQH;
    public string gStrFPos;
    public string gStrFStar;
    public string gStrFSave;
    public string gStrFAddress;
    public string gStrFLblColor;
    public string gStrFIsCheckList;
    }
    }
    #region 加载字段规则
    private bool m_GetRule()
    {
    string strSQL = "";
    DataTable dtGet = null;
    #if(DEBUG)
    try
    {
    #endif
    if (Common.gIntTypeOrder == 95)
    {
    strSQL = "select A.FNo,A.FName,A.FLock,A.FCaption,A.FType," +
    "A.FMust,A.FMin,A.FMax,A.FDefault,A.FDate,rn" +
    "A.FDB,A.FAllow,A.FDisallow,A.FSB,A.FBig,A.FSmall,A.FInputMethod," +
    "A.FCHK,A.FRelation,A.FDesc,A.FSecond,rn" +
    "A.FQC,A.FException,A.FASupp,A.FYQH,A.FPos,A.FStar,A.FSave,"+
    "A.FAddress,A.FLblColor,A.FIsCheckList from P_Field_Rule95 A rn" +
    "INNER JOIN P_Field_Initial B ON A.FNo=B.FNo rn" +
    "where A.FormType=1 AND B.FSection='1' AND " +
    "(B.FRegion95=1 OR B.FRegion95=-1) ORDER BY A.FOrder";
    }
    else
    {
    strSQL = "select A.FNo,A.FName,A.FLock,A.FCaption,A.FType,"+
    "A.FMust,A.FMin,A.FMax,A.FDefault,A.FDate,rn" +
    "A.FDB,A.FAllow,A.FDisallow,A.FSB,A.FBig,A.FSmall,"+
    "A.FInputMethod,A.FCHK,A.FRelation,A.FDesc,A.FSecond,rn" +
    "A.FQC,A.FException,A.FASupp,A.FYQH,A.FPos,A.FStar,"+
    "A.FSave,A.FAddress,A.FLblColor,A.FIsCheckList "+
    "from P_Field_Rule A rn" +
    "INNER JOIN P_Field_Initial B ON A.FNo=B.FNo rn" +
    "where A.FormType=" + Common.gIntFormType.ToString() +
    " AND B.FSection='1' AND (B.FRegion=" + Common.gIntRegion.ToString() +
    " OR B.FRegion=-1) ORDER BY A.FOrder";
    }
    dtGet = DB.GetDataTableBySQL(strSQL);
    if (dtGet.Rows.Count <= 0)
    {
    Common.ShowMessage("字段规则表没有数据,请马上联系软件工程师!", MessageBoxIcon.Error);
    return false;
    }
    //获得类信息,为下面的反射调用做准备
    Type oType = Type.GetType("CCB_Donet.ClassFolder.FieldRuleInfo");
    //生成类对象数组,和数据库记录个数是一致的
    mMainFieldRule = new FieldRuleInfo[dtGet.Rows.Count];
    for (int i = 0; i < dtGet.Rows.Count; i++)
    {
    //这里使用反射动态为FieldRuleInfo字段赋值数据
    mMainFieldRule[i] = new FieldRuleInfo();
    for (int j = 0; j < dtGet.Columns.Count; j++)
    {
    //这里直接获取类的字段名称,然后把数据库里对应字段的值赋值给它
    FieldInfo fieldInfo = oType.GetField("gStr" + dtGet.Columns[j].ColumnName,
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
    | BindingFlags.Static);
    fieldInfo.SetValue(mMainFieldRule[i], dtGet.Rows[i][j].ToString());
    }
    }
    return true;
    #if(DEBUG)
    }
    catch (Exception ex)
    {
    return false;
    MyLog.WriteErrLog("frmDE-m_GetRule", ex.Message);
    }
    finally
    {
    dtGet = null;
    }
    #endif
    }
    #endregion
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/18 12:29:24