路过秋天

同样的3年,有的人从学生到当了MVP了,而我却在原地,卖弄当年的代码,秋天的风,有点凄,有点凉!

公告信息
内涵是很强大的~~~别看外表~~~当犀利哥入侵不了的时候,感觉有种莫名的失落~~~
文章档案
最新评论

CYQ.Data 轻量数据层之路 V3.0版本发布-Xml绝对杀手(三十二)

前言:

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

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

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

提前预览网址:
http://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(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,
"
  • "" + UrlPrefix+ "/article/category/{0}\" >{1} ({2})
  • "
    , Class.ID, Class.Name, Class.Count);
    }
    }

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

    public void FillNewComment()//最新评论
    {
    MDataTable table;
    int
    count;
    using (MAction action = new
    MAction(TableNames.Comment))
    {
    table
    = action.Select(1, 10, string.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,
    "
  • "" + UrlPrefix + "/article/detail/{0}\" >{1}
  • "
    , 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 (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反馈、优化建议、最新框架下载

    结言:

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

    秋色园是QBlog的官方站点,由路过秋天创建,基于cyqdata数据层框架开发的支持多用户、多语言、多数据库(access,mssql,oracle)、目录级url等功能强大的博客系统
    新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

    2008/11/8 0:00:00 | 开发测试及演示 | |

    #21游客2010/11/17 8:24:35
    1�" or sleep(10)#
    #20游客2010/11/17 8:24:28
    1�' or sleep(10)#
    #19游客2010/11/17 8:24:22
    1" or sleep(10)#
    #18游客2010/11/17 8:24:16
    1' or sleep(10)#
    #17游客2010/11/17 8:24:09
    1 or sleep(10)#
    #16游客2010/11/17 8:24:03
    1');waitfor delay '0:0:10'--
    #15游客2010/11/17 8:23:57
    1);waitfor delay '0:0:10'--
    #14游客2010/11/17 8:23:47
    1';waitfor delay '0:0:10'--
    #13游客2010/11/17 8:23:40
    1;waitfor delay '0:0:10'--
    #12游客2010/11/17 8:23:34
    1" and sleep(10)#
    #11游客2010/11/17 8:23:27
    1' and sleep(10)#
    #10游客2010/11/17 8:23:13
    1 and sleep(10)#
    #9游客2010/11/17 8:22:47
    acunetix_bad_value' or 2='2
    #8游客2010/11/17 8:22:09
    1+31337-31337
    #7游客2010/11/17 8:21:51
    1' || '
    #6游客2010/11/17 8:21:34
    1" and "1"="1
    #5游客2010/11/17 8:21:21
    1' and '1'='1
    #4游客2010/11/17 8:21:11
    1 and 1=1
    #3游客2010/11/17 8:20:59
    1" and "1"="1" --
    #2游客2010/11/17 8:20:42
    1' and '1'='1' --
    #1游客2010/11/17 8:20:18
    1 and 1=1 --
    • 发表评论