![]() | CYQ.Data 数据层框架CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。 |
CYQ.Data 数据框架 版本发布 V4.0
平台动态 |
|
|
| #楼主 |
前言: 继正式发布V3.5到现在,刷的一下又1个半月过去了,而框架随着“秋色园-QBlog博客”一起成长,始终没停下脚步!!!
框架的主要成长在CYQ.Xml名称空间下成长的较多,好多细节的修改,没写什么日记记录,所以本文介绍的内容相对较少。 下面就介绍下V4.0中有日志记录部分的更新。 本次版本升级记录: 1:增加对Case语句的多数据库处理
2:MAction:开放DalType属性,允许获取当前操作的数据库类型 3:Pager:解决分页存储过程order by参数过长问题,参数加长 4:修正Pager的Access数据库分页,并使用3次top方式分页 5:修正bit类型对“1”的转换为true 6:修改自定义表语句查询无数据时,也返回表架构 7:Xml类里增加RSS功能 8:Proc 修正从sql切换到存储过程的bug 9:其它,随着秋色园一起成长优化的CYQ.Xml名称空间下的几个类。 以下对升级记录进行详解
一:Case语句的多数据库处理 在秋色园的开发中,又遇到一个需要用到Case语句的sql,因此,在思考良久之后,增加了Case语法的多语句处理,和之前语句一样的用法,关键字写成[#关键字],即可。 示例代码:节选自秋色园 string orderByKey = string.Format("{0}+[#CASE] [#WHEN] languageID={1} [#THEN] {2} [#ELSE] 0 [#END]", key, (int)Language.LanKey, (isHits ? 1000 : 100)); 说明: 同样的语句可以在Access、Mssql、Oracle中运行,如何解析就是框架内部的事情了。 如果需要变成普通的语句,只需要把[#]替换掉即可。 二:MAction:开放DalType属性,允许获取当前操作的数据库类型 通过增加的开放属性,使你在使用多数据库支持时,除了关键字解析方法之外,还可以使用分支语句。 示例代码: public void Demo() { using (MAction action = new MAction(TableNames.Blog_Content)) { switch (action.DalType) { case CYQ.Data.DAL.DalType.Access: //do access something break; case CYQ.Data.DAL.DalType.Oracle: //do Oracle something break; case CYQ.Data.DAL.DalType.Sql: //do Sql something break; } } } 三:Pager:解决分页存储过程order by参数过长问题,参数加长 原因解说:
框架内部提供的MSSQL的分页存储过程中,有一条原始的语句:cast(@OrderBy as nvarchar) 当order by 语句条件很复杂很长时,长度不够[默认好像是50个长度]将引发问题,因此, 框架内部长度改成400个长度如下:cast(@OrderBy as nvarchar(400)) 如果遇到了,请注意一下。 四:修正Pager的Access数据库分页,并使用3次top方式分页 之前的Access内部top max方式分页在使用自定义表且条件复杂的情况下,分页结果出现了些许偏差。
于是内部修正时使用了另两种分页语句:一种是not in分页,另一种是3次top。 在没有数据比较的情况下,使用了not in,并在秋色园中持续了一段时间。 前几天发现秋色园的分页速度有点慢,于是切到3次top查询分页,速度刷的一下上去了。 五:修正bit类型对“1”的转换为true 对于bit类型,有时候取/设值为是1或0,本次版本兼容数字型自动转化为true与false。 六:修改自定义表语句查询无数据时,也返回表架构 本次需求的来源始于秋色园的管理后台,因为后台使用传统的webform开发方式,在列表页上显示,当没有数据时,发现表头也没有。 于是增加在查询失败或无数据时,自动填充返回的MDataTable,使之结构完整。 七:Xml类里增加RSS功能 数据框架里的RSS类,比我之前发布的文章:实战篇-六十六行完成简洁的Rss输出类 要多出些许代码,因为考虑到和框架内部MDataTable的结合使用。 示例代码:节选自秋色园-完整RSS处理逻辑 public string GetRss(int cacheTime) { string cacheKey = "rss_" + DomainID; object outXml = Cache.Get(cacheKey); if (outXml != null) { return outXml.ToString(); } else { Rss rss = new Rss(); MutilLanguage seoDoc = new MutilLanguage(MapPath(Config.GlobalSkinPath + IDPage.SiteTitle),true,false); if (DomainID == 0)//系统Rss { rss.Set(seoDoc.Get(IDLang.sitetitle) + " - " + seoDoc.Get(IDLang.powerby), Config.HttpHost, seoDoc.Get(IDLang.description)); } else//用户Rss { string title =GetLangText(IsUserLang,DomainUser.Get if (string.IsNullOrEmpty(title)) { title = GetLangText(IsUserLang,DomainUser.Get } rss.Set(title + " - " + seoDoc.Get(IDLang.sitename), Config.HttpHost + "/" + Domain, DomainUser.Get } rss.SetImg(Config.HttpHost +Config.SystemTechSkinPath+"images/logo_"+seoDoc.LanKey.ToString().Substring(3)+".jpg", seoDoc.Get(IDLang.sitetitle) + " Logo", Config.HttpHost); string sql = CustomSQL.Rss + (DomainID > 0 ? " and UserID=" + DomainID : ""); using (MProc proc = new MProc(sql)) { rss.LoadData(proc.ExeMDataTable()); rss.SetMap(RssItemName.Title, null, Content.Title); rss.SetMap(RssItemName.Link, Config.HttpHost + "/{0}/article-detail-{1}", Users.UserName, Content.ID); rss.SetMap(RssItemName.Author, null, Users.NickName); rss.SetMap(RssItemName.PubDate, null, Content.CreateTime); rss.SetMap(RssItemName.Description, null, Content.Body); } string xml = rss.OutXml; Cache.Add(cacheKey, xml, null, cacheTime); return xml; } } 八:Proc 修正从sql切换到存储过程的bug 在使用MProc时,执行完存储过程之后,通过mproc.ResetProc("sql语句")切换到sql执行时,会提示失败。 本版本修正了这一小bug。 九:框架整体的优化 在秋以园的开发中,经过不断的重构及优化,框架内部会有更的细节修改,以便能适应更多的情况,但并不影响之前的功能。 由于考虑到CYQ.Xml方面应用的人不多,所以日志记录也相对较少。 不过重点说一句,在秋色园的整体应用中,CYQ.Xml名称空间下的类,是核心应用成员,希望大家伙空多关注下这方面的应用。 十:V4.0框架下载 下载地址:下载中心-秋色园 后续,会写一两篇CYQ.Xml方面的应用示例文章,欢迎大家关注下。 ![]() |
发表评论
论坛公告
帖子搜索
最新帖子
最新评论
- 请教博主。我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年就过了!!!!