• CYQ.Data 轻量数据访问层(三) 构造数据单元(下)


    继上一节,回头看这张图片:

    回顾上节的话题,怎么设计这样一个数据单元类?才不会有重复的单元表头,又能合理解释出数据与表头的关系?

    经过长久的深思后。。一个关键的字出来了"ref",引用,是的,用的这就个,如果每个单元格,都包括值和单元表头,而单元表头,都引用同一个的时候,就刚好满足了需求。

    于是,我们开始写出这样的类:

    先构造出一个存放值的类:

    /// <summary>
        
    /// 只包函被填充的数据状态和值
        
    /// </summary>
        public class MDataCellValue
        {
            
    /// <summary>
            
    /// //值是否为空
            
    /// </summary>
            internal bool _IsNull;
            
    /// <summary>
            
    /// 值是否被改变了
            
    /// </summary>
            internal bool _IsChange;
            
    /// <summary>
            
    /// 值是多少
            
    /// </summary>
            internal object _Value;

            
    public MDataCellValue()
            {
                _IsNull 
    = true;
                _IsChange 
    = false;
                _Value 
    = null;
            }
        }

    接着,我们构造存放表头:

    我们可以参考数据库,也可以参考DataCell中的数据结构,构造出以下的类:

      /// <summary>
        
    /// 只包函数据库字段的属性
        
    /// </summary>
        public class MDataCellStruct
        {
            
    internal bool _IsCanNull;
            
    internal bool _IsReadOnly;
            
    internal string _ColumnName;
            
    internal System.Data.SqlDbType _SqlType;
            
    internal int _MaxSize;
            
    internal string _Operator = "=";
            
    internal ParameterDirection _ParaDirection;

            
    #region 构造函数
            
    public MDataCellStruct(string ColumnName, System.Data.SqlDbType SqlType, bool IsReadOnly, bool IsCanNull, int MaxSize, ParameterDirection paraDirection)
            {
                _ColumnName 
    = ColumnName;
                _SqlType 
    = SqlType;
                _IsReadOnly 
    = IsReadOnly;
                _IsCanNull 
    = IsCanNull;
                _MaxSize 
    = MaxSize;
                _ParaDirection 
    = paraDirection;
            }

            
    #endregion

            
    #region 属性
            
    /// <summary>
            
    /// 数据字段列名称
            
    /// </summary>
            public string ColumnName
            {
                
    get
                {
                    
    return this._ColumnName;
                }

            }

            
    /// <summary>
            
    /// 数据类型
            
    /// </summary>
            public System.Data.SqlDbType SqlType
            {
                
    get
                {
                    
    return this._SqlType;
                }
            }

            
    /// <summary>
            
    /// 数据字段列是否为只读
            
    /// </summary>
            public bool IsReadOnly
            {
                
    get
                {
                    
    return this._IsReadOnly;
                }
            }

            
    /// <summary>
            
    /// 数据字段列长度大小
            
    /// </summary>
            public int MaxSize
            {
                
    get
                {
                    
    return this._MaxSize;
                }
            }

            
    /// <summary>
            
    /// 数据字段列值是否能为空
            
    /// </summary>
            public bool IsCanNull
            {
                
    get
                {
                    
    return this._IsCanNull;
                }
            }
            
    /// <summary>
            
    /// 存储过程时用的参数
            
    /// </summary>
            public ParameterDirection ParaDirection
            {
                
    get
                {
                    
    return this._ParaDirection;
                }
                
    set
                {
                    _ParaDirection 
    = (ParameterDirection)value;
                }
            }
            
    public string Operator
            {
                
    get
                {
                    
    return _Operator;
                }
                
    set
                {
                    _Operator 
    = value;
                }
            }
            
    #endregion


        }

    紧跟着,我们要开始构造单元格了,它包含了数据单元结构和值两个类,同时,为了让以后所有行的单元格里的表头都指向同一个,我们用出了"ref"

    Code

    为了方便从数据单元里访问数据结构和值,我们通过增加属性来对外开放

    Code

    至此,我们终于构造完数据单元格,当然了,在对Value的Set属性中,以后我们会加上数据类型的比较和数据长度的验证,来增加数据的安全性

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    2.采用字符的移位方式实现字符文本加密解密。
    用自己的算法实现startsWith和endsWith功能。
    采用多种算法,模拟摇奖:从1-36中随机抽出8个不重复的数字
    输入5个数用冒泡排序进行从小到大排列
    题目六:控制台输入年龄,根据年龄输出不同的提示
    题目五:控制台输出三角形和菱形
    题目四:控制台输出九九乘法表
    百马百担
    classNum 表示学生的班号,例如“class05”。 有如下List  List list = new ArrayList();
    已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数     2008 北京奥运会男足参赛国家:  科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1597719.html
Copyright © 2020-2023  润新知