CYQ.Data 轻量数据层之路 V3.0版本发布-Xml绝对杀手(三十二)-阿里云开发者社区

开发者社区> 泡泡浅眠> 正文

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:基本语法

复制代码
ExpandedBlockStart.gif
 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语法,如:

复制代码
ExpandedBlockStart.gif
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:最原始循环

复制代码
ExpandedBlockStart.gif
       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:原始循环+对值格式化处理

复制代码
ExpandedBlockStart.gif
        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:节点预处理

复制代码
ExpandedBlockStart.gif
       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:节点预处理+格式化

复制代码
ExpandedBlockStart.gif
        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反馈、优化建议、最新框架下载
复制代码

 

 

  结言:

 谢谢大伙对本框架喜爱,欢迎大伙下载使用。

 

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2010/11/03/1867642.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示“处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Man...
822 0
MaxCompute(原ODPS) Studio 2.7.0 版本发布,让代码效率更高
新功能: 作业管理: 显示作业排队队列 作业管理: 显示正在执行作业的历史状态转换序列 SQL编辑器: 跳转到 UDF 和 Table 的声明 SQL编辑器: 代码折叠和括号匹配支持 SQL编辑器: 常用语句模板支持 UDF: UDF 项目模块的 Maven 支持 UDF: UDF 一
3328 0
智能数据引擎Dataphin重磅发布,提供一站式的技术管理能力
面对各行各业日趋强烈的大数据建设、管理及应用诉求,2018年2月28日MWC大会,阿里云重磅推出了智能数据构建与管理平台Dataphin——从数据接入到数据消费全链路,提供一站式的大数据能力,包括产品、技术和方法论等,致力于助力企业打造标准统一、融会贯通、资产化、服务化、闭环自优化的智能数据体系。
9628 0
AnalyticDB 2.4版本发布啦!
AnalyticDB 2.4版本本周发布,很多用户期待的资源大盘功能终于上线。该功能以实例汇总信息和单节点资源信息两个维度向用户展示资源详情和系统性能,很好地协助用户进行数据探查。该版本又新增了DUMP 时支持返回数据总条数功能以及重点优化了MPP下几个函数的兼容性等特性。
2586 0
中国商业银行数字化转型调查研究报告发布,网商银行联手OceanBase打造未来金融业典范
蚂蚁金服自主研发的金融级分布式关系数据库OceanBase助力网商银行业务发展
934 0
+关注
2248
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载