![]() | CYQ.Data 数据层框架CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。 |
CYQ.Data 数据框架 版本发布 V3.0
平台动态 |
|
|
| #楼主 |
前言: 继正式发布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, "<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(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, "<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(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 数据框架 下载
结言: 谢谢大伙对本框架喜爱,欢迎大伙下载使用。
![]() |
发表评论
论坛公告
帖子搜索
最新帖子
最新评论
- 请教博主。我mysql的提示 V5.7.7.4 MySql.xxxx:check the tablename "tbl_site_info" is exist? error:ExeDataReader():Expression #1 of ORDER BY clause is not in SELECT list, references column 'information_schema.s1.ORDINAL_POSITION' which is not in SELECT list; this is incompatible with DISTINCT 配置如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="Conn" connectionString="host=192.168.3.101;Port=3306;Database=xxxxx;uid=root;pwd=2017" providerName="MySql.Data.MySqlClient"/> </connectionStrings> </configuration>
- 查询语句有点问题,软件启动时查询语句可以从数据库查询出数据,软件一直运行时无论怎么修改数据库,查询出来的还是老数据,不知道是为什么
- 我语句中用到了union all而且两个查询都有查询条件,action.select总是不成功,不知道有没有什么好的解决办法,谢谢
- 大神,如果我想通过一个对象(从数据映射过来的)要插入的话,我需要遍历字段然后每个set一下吗?有没有更好的方法??
- 真心好用,想问下秋天直接拼写sql怕注入吗
- V4.5后,好多方法都改变了,求来个新的日志帮助
- 請問大神V5源碼要多少錢 我是和交流過的
- 楼主,,从数据库里查出来并绑定datagridview,但是显示的都是数据库里的英文名,怎么改??好纠结啊这个。。。。
- 我想问一下,主从表添加怎样处理
- 10年就过了!!!!