zoukankan      html  css  js  c++  java
  • CYQ.Data 轻量数据层之路 V3.0版本发布Xml绝对杀手(三十二)

    前言:

    继正式发布V2.0到现在,已30来天了,一直静悄悄的都没发布什么版本

    中间仅有插播了一下:CYQ.Data 轻量数据层之路 V2.5 抢先体验版本功能说明演示 (二十九)  

    只因最近花了很多时间在重构一个以前的博客,目前已完成其基础功能,不日将发布相关文章。

    提前预览网址:http://www.cyqdata.com/

    本次版本升级内容大体说明

    1:Access应用调整
    2:修正对:uniqueidentifier、ntext、text、Image等几个类型的应用。
    3:扩展缓存类CacheManage方法
    4:本次重点,增加CYQ.Data.Xml名称空间,简化xml操作。
    其它:内部小调整N多小代码,就略过了......

     以下针对更新进说明

     

     一:Access应用调整

     1:默认关闭事务:Access一次Open只允许执行一条语句。

     2:处理DateTime类型:默认需要转成Date类型才能正确提交。

     3:数据库链接字符串处理虚拟目录相对路径:

     Access配置文件链接可写成:

    <add name="Conn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}" providerName="System.Data.OleDb"/>
    <add key="AccessDbNameForWeb" value="myspace.mdb"/>

     4:修正自定义视图语句查询语句bug:由于未设置表名,查询之后返回记录总数为0。

     二:修正特殊字段类型处理

     1:默认uniqueidentifier、ntext、ntext、Image等字段长度为16,在提交时会被截断,本次修正字段初始并对Image类型进行特殊处理。

     三:缓存类调整

     1:增加Add重载方法,允许传入文件依赖路径及缓存时间

     2:增加SetChange、GetHasChanged方法,允许设置及获取缓存对象是否改变。

     四:增加CYQ.Data.Xml名称空间,增加5个类

     1:抽象基类:XmlBase-》处理加载xml,名称空间处理,DTD处理

     2:具体操作类:XmlHelper-》实现对xml具体的增删改查操作,并加入强大的功能,处理MDataRow和MDataTable。

     3:DTD解析类:XhtmlUrlResolver-》实现对实体dtd路径的解析

     4:多国语言:MutilLanguage-》实现对xml最基本的文本取值。

     5:SetType、ValueReplace-》枚举与替换常量

     五:XmlHelper 重点语法演示

     A:基本语法

     1:实例化 XmlHelper helper=new XmlHelper(true); //为ture则表示加载html,默认处理名称空间及解析dtd

     2:加载    bool result=helper.Load(Server.MapPath("demo.html"));

     3:查询    XmlNode node=helper.GetByID("cyq");//从整个文档取只取id='cyq'的节点。

     4:子查询 XmlNode child=Helper.GetByID("cyqchild",node);//从node节点内容中找id='cyqchild'的节点

     --其它Get与GetByXX方法类似。

     5:列表查询 XmlNodeList nodeList=helper.GetList("div","id","cyq",node);//从node节点内容中找div且id='cyq'的所有节点

     --这是最长的重载方法,其它重载方法省略
     
     6:节点赋值 helper.Set(node,SetType.Value,"http://cyq1162.cnblogs.com");//对node的属性value设置值,如果属性不存在则创建。
     
     7:其它方法详见V3.0 API文档

     B:与CYQ.Data.Table 共舞,创新SetFor与SetForeach语法

     以下示例节选自 重构中的 8国语言版博客

     1:实例化与加载略过-》并改实例名helper为Document

     2:LoadData(MDataRow) 与SetFor语法,如:

    using(MAction action=new MAction(TableNames.Users))
    {
         
    if(action.Fill(1))
         {
            Document.LoadData(action.Data);
            Document.SetFor("labSpaceName");//从action.Data中取SpaceName的值赋给id=labSpaceName的节点的InnerXml属性。
            Document.SetFor(IDKey.labSpaceIntro,SetType.value);//从action.Data中取SpaceIntro的值赋给id=labSpaceIntro的节点的value属性。
         }
    }

      3:LoadData(MDataTable) 与SetForeach语法,如:

      示例1:最原始循环

           public void FillArticlClass()//文章分类
            {
                MDataTable table;
                
    int count;
                
    using (MAction action = new MAction(TableNames.Class))
                {
                    table 
    = action.Select(00string.Format("{0}={1} and {2}=0", Class.UserID, DomainID,Class.TypeID), out count);
                }
                
    if (count > 0)
                {
                    Document.LoadData(table);
                    Document.SetForeach(IDKey.labArticleClass, 
    "<li><a href=\"" + UrlPrefix+ "/article/category/{0}\" >{1}</a> ({2})</li>", Class.ID, Class.Name, Class.Count);
                }
            }

     示例2:原始循环+对值格式化处理

            public void FillNewComment()//最新评论
            {
                MDataTable table;
                
    int count;
                
    using (MAction action = new MAction(TableNames.Comment))
                {
                    table 
    = action.Select(110string.Format("{0}=0 and {1}={2}",Comment.TypeID,Comment.ContentUserID, DomainID), out count);
                }
                
    if (count > 0)
                {
                    Document.LoadData(table);
                    Document.OnForeach 
    += new XmlHelper.SetForeachEventHandler(Document_OnForeach);
                    Document.SetForeach(IDKey.labNewComment, 
    "<li><a href=\"" + UrlPrefix + "/article/detail/{0}\" >{1}</a></li>", Comment.ContentID, Comment.Body);
                }
            }

            
    string Document_OnForeach(string text, object[] values, int row)
            {
    //对评论长度进行截断
                string key = Convert.ToString(values[1]);
                
    if (!string.IsNullOrEmpty(key) && key.Length > 12)
                {
                    values[
    1= key.Substring(012);
                }
                
    return text;
            }

     示例3:节点预处理

           public void FillAllUser()//填充主页所有用户
            {
                
    using (MAction action = new MAction(TableNames.Users))
                {
                    Document.Set(IDKey.labUserName, SetType.A, 
    "{0}[{1}]",Config.HttpHost+"/{1}");
                    Document.LoadData(action.Select());
                    Document.SetForeach(IDKey.labAllUser, SetType.InnerXml, Users.NickName, Users.UserName);
                }
            }

      示例4:节点预处理+格式化

            private void FillForeachArticle(MDataTable table)//填充循环文章列表
            {
                Document.Set(IDKey.labEdit,SetType.Href,UrlPrefix 
    + "/admin/article/edit/{0}");
                Document.Set(IDKey.labDelete, SetType.Href, UrlPrefix 
    + "/admin/article/del/{0}");
                Document.Set(IDKey.labTitle, SetType.A, 
    "{1}", UrlPrefix + "/article/detail/{0}");
                Document.Set(IDKey.labCreateTime, 
    "{2}");
                Document.Set(IDKey.labIsPub, 
    "{3}");
                Document.Set(IDKey.labHits, ValueReplace.Source 
    + "({4})");
                Document.Set(IDKey.labCommentCount, ValueReplace.Source 
    + "({5})");

                Document.LoadData(table);
                Document.OnForeach 
    += new XmlHelper.SetForeachEventHandler(Document_OnForeach);
                Document.SetForeach(IDKey.labArticleList,SetType.InnerXml,
                Content.ID, Content.Title, Content.CreateTime, Content.IsPub, Content.Hits, Content.CommentCount);

            }

            
    string Document_OnForeach(string text, object[] values, int row)
            {
                values[
    3= Convert.ToString(values[3]) == "1" ? "已发布" : "未发布";
                
    return text;
            }

      六:V3.0 API文档与CYQ.Data.DLL下载

     本次版本发布包括:

     框架DLL:CYQ.Data.DLL V3.0版本

     API文档:V3.0版本

     具体下载地址:CYQ.Data 轻量数据层之路 bug反馈、优化建议、最新框架下载

      结言:

     谢谢大伙对本框架喜爱,欢迎大伙下载使用。
  • 相关阅读:
    Linnia学习记录
    漫漫考研路
    ENS的学习记录
    KnockoutJS 3.X API 第四章 数据绑定(4) 控制流with绑定
    KnockoutJS 3.X API 第四章 数据绑定(3) 控制流if绑定和ifnot绑定
    KnockoutJS 3.X API 第四章 数据绑定(2) 控制流foreach绑定
    KnockoutJS 3.X API 第四章 数据绑定(1) 文本及样式绑定
    KnockoutJS 3.X API 第三章 计算监控属性(5) 参考手册
    KnockoutJS 3.X API 第三章 计算监控属性(4)Pure computed observables
    KnockoutJS 3.X API 第三章 计算监控属性(3) KO如何实现依赖追踪
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1867642.html
Copyright © 2011-2022 走看看