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;DataSource={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:实例化XmlHelperhelper=newXmlHelper(true);//为ture则表示加载html,默认处理名称空间及解析dtd
2:加载boolresult=helper.Load(Server.MapPath("demo.html")); 3:查询XmlNodenode=helper.GetByID("cyq");//从整个文档取只取id='cyq'的节点。 4:子查询XmlNodechild=Helper.GetByID("cyqchild",node);//从node节点内容中找id='cyqchild'的节点 --其它Get与GetByXX方法类似。 5:列表查询XmlNodeListnodeList=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
(MActionaction
=
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()
//
文章分类
{ MDataTabletable; int count; using (MActionaction = new MAction(TableNames.Class)) { table = action.Select( 0 , 0 , string .Format( " {0}={1}and{2}=0 " ,Class.UserID,DomainID,Class.TypeID), out count); } if (count > 0 ) { Document.LoadData(table); Document.SetForeach(IDKey.labArticleClass, " <li><ahref= "" +UrlPrefix+ " / article / category / { 0 } " >{1}</a>({2})</li> " ,Class.ID,Class.Name,Class.Count); } } 示例2:原始循环+对值格式化处理
public
void
FillNewComment()
//
最新评论
{ MDataTabletable; int count; using (MActionaction = new MAction(TableNames.Comment)) { table = action.Select( 1 , 10 , string .Format( " {0}=0and{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><ahref= "" +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( 0 , 12 ); } return text; } 示例3:节点预处理
public
void
FillAllUser()
//
填充主页所有用户
{ using (MActionaction = 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(MDataTabletable)
//
填充循环文章列表
{ Document.Set(IDKey.labEdit,SetType.Href,UrlPrefix + " /admin/article/edit/{0} " ); Document.Set(IDKey.labDelete,UrlPrefix + " /admin/article/del/{0} " ); Document.Set(IDKey.labTitle, " {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, Content.ID,Content.Title,Content.CreateTime,Content.IsPub,Content.Hits,Content.CommentCount); } string Document_OnForeach( string text, int row) { values[ 3 ] = Convert.ToString(values[ 3 ]) == " 1 " ? " 已发布 " : " 未发布 " ; return text; } 六:V3.0 API文档与CYQ.Data.DLL下载
本次版本发布包括:
框架DLL:CYQ.Data.DLLV3.0版本 API文档:V3.0版本 具体下载地址:CYQ.Data 轻量数据层之路 bug反馈、优化建议、最新框架下载 结言:
谢谢大伙对本框架喜爱,欢迎大伙下载使用。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |