• 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(扫码支持作者):微信:
  • 相关阅读:
    关于ashx的基本应用
    sqlserver中在存储过程中写事务
    安装 SQL Server 2008 需要 Windows PowerShell
    Visual Studio .NET 无法创建或打开应用程序。问题很可能是因为本地WEB本地服务器上没有安装所需的组件。
    Android开发之旅:环境搭建及HelloWorld
    sqlserver 2005 两个表之间的更新操作。
    MS SQLSERVER SELECT FOR XML 中字符的限制问题
    把SVN设置成系统服务
    vs2005 水晶报表部署时处理方法
    Expression Studio简体中文正式版 AND KEY
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1597719.html
Copyright © 2020-2023  润新知