cyq.data 连接mysql_CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)
CYQ.Data V5版本的文本数据库,以前有过相关的介绍:
周末一起用文本数据库玩玩Code First 数据的存储,是基于json格式或xml格式的,而实现的原理,也有一篇介绍:
CYQ.Data V5文本数据库技术原理解密 前几天实现基本功能后,也写了一篇突发想支持SQL语句的冲突想法的来源:
CYQ.Data 文本数据库解析SQL语法
对于文本数据库的原理:简单的说,就4步: 1:存储用json或xml。
2:读取时还原为MDataTable。
3:操作时操作MDataTable实现数据行的变化。
4:保存时重新写为json或xml。 PS:当然还有一个CodeFirst模式时自动产生用于记录表结构的"表名.ts"文件。
文本数据库的Where语句分拆: 原先的功能,有Select( where),这个where是支持sql语句的,简单说就是对where进行了以下分析:
string where= " id>1 and name like '%a%' order by id desc ";
分析出where,order by ,再分析出id,name及对应的值,循环进行值判断,提取出合适的行。
从而达到查询的功能。
现在要支持SQL,看似复杂点又提升了点,因为简单的SQL语句大体如下: Insert into ErrorLogs(PageUrl , ErrorMessage) values( ' http://... ', ' what '' is the ... ')
Select count(*) from ErrorLogs...
Select * from ErrorLogs where ...
Select id,name from ErrorLogs ...
Update ErrorLogs set id= 1 and name= ' name is Mr '' Right '
Delete From ErrorLogs where ...
对于这些字符串的处理,真是很考基本功: 比如:Insert into ErrorLogs(PageUrl , ErrorMessage) values( ' http://... ', ' what '' is (the (name))... ')
把这条语句,分拆出:
1:操作:Insert
2: 表名:ErrorLogs
3:PageUrl : " http://... "
4: ErrorMessage : " 'what'' is (the (name))... " PS:我觉的可以适当的拿来做面试题了。。。。
大体整体的实现,基本上就等同于解析上面的SQL语法,然后回归到MDataTable的原始操作上去,细节就不�嗦重复了。
下面看一下实现后的效果图:
项目截图就省略了,页面后台的代码: protected void btnExec_Click( object sender, EventArgs e)
{
if (! string.IsNullOrEmpty(txtSql.Text))
{
MProc proc = new MProc(txtSql.Text, txtConn.Text);
switch (ddlExeType.SelectedValue)
{
case " 0 ":
labTip.Text = proc.ExeScalar< string>();
break;
case " 1 ":
labTip.Text = proc.ExeNonQuery().ToString();
break;
case " 2 ":
MDataTable dt = proc.ExeMDataTable();
rptList.DataSource = dt;
rptList.DataBind();
break;
}
proc.Close();
}
} 上面这段代码很简单,执行指定链接的SQL语句,然后显示相应的信息。
操作数据库,基本配置文件里指定日志的链接字符串是必不可少的内容:
说明:把系统错误日志用文件数据库记录,CYQ.Data V5内置用了CodeFirst方式来实现异常的数据库执行日志错误: 表名为ErrorLogs
4个字段分别为:
1:ID,PageUrl,ErrorMessage,CreateTime。
下面我们看界面:由于我的项目里本身就有日志,我们查询一下:
OK,下面我们删除所有数据库,执行成功后删除了5行数据:
再添加一行数据:
最后更新这行1行数据:
最终再查询显示一次:
至此,整个基本的SQL语法解析和实现就告终了,至于什么GroupBy,多表,[前言: 这两天有点感冒状态,除了以前折腾 微博粉丝精灵腾到三更,最近也在折腾个别工具到四更,偶尔心来心潮,赶紧写写文章,最近有很多朋友对 CYQ.DataV5里的文本数视图,函数之类的,就在文本数据库的能力之外了。
功能的实现自己用两个Table去For还是while去实现自己需要的逻辑。
下面再补充一下ErrogLogs这个日志说明: 默认的CodeFirst,简单说就是你指定哪种数据库类型,就会自动创建相应的表结构,然后把执行SQL的错误信息写到该日志里,方便查询分析和解决。
以前,我习惯把日志的链接写成:
其实就是指向Conn(CYQ.Data默认的主数据库配置顶),这样就把日志表放到和主数据库表同一个数据库。。
结果有时候,如果主数据库挂掉,异常日志就无法记录了,所以建议是存到其它数据库。
但有了文件数据库之后,用文本来存储日志,看似是个不错的选择,而且操作也相当方便。
CodeFirst时,如果有数据(第一条数据产生时,自动根据实体产生了表结构,如果是文本,在指定的目录下出来这个)
当然了,除了比较标准的,是自动生成的,如果你是自己手工创建,可以新建一个表名.ts表结构,内容: ID, int;
PageUrl, string;
ErrorMessage, string;
CreateTime,datetime;
CYQ.Data V5里文本数据库,实用价值: 包括网站站点的广告节点显示,友情链接,一些需要经常或偶尔编辑的Key,Value值等项,存文本数据库是最方便不过了。
有效的把非主站的附加数据,存储到文本数据库,利用文本数据完全内存表机制,高效,节能,又方便。
CYQ.Data V5在文本数据库、Access、SQLite、XHtmlAction等功能,都是不需要授权可以直接使用的。
下载地址:
http://www.cyqdata.com/download/article-detail-426
cyq.data 连接mysql_CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)相关推荐
- cyq.data 连接mysql_CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)-阿里云开发者社区...
CYQ.Data V5版本的文本数据库,以前有过相关的介绍:周末一起用文本数据库玩玩Code First 数据的存储,是基于json格式或xml格式的,而实现的原理,也有一篇介绍: CYQ.Data ...
- openSearch支持mysql版本_OpenSearch 使用二三事-阿里云开发者社区
先交代下我们的使用场景.我们是把一张分库分表的逻辑表导入了 OpenSearch,建立了相关索引,供后台管理界面查询使用.最近在使用的过程中遇到了几个问题.记之. 查询的数据最多只有 5000 条 我 ...
- cyq.data 连接mysql_CYQ.Data V5文本数据库技术原理解密
前言: 这两天有点感冒状态,除了以前折腾 微博粉丝精灵 腾到三更,最近也在折腾个别工具到四更,偶尔心来心潮,赶紧写写文章,最近有很多朋友对CYQ.Data V5里的文本数据库感兴趣,这里就给大伙说下文 ...
- cyq.data 连接mysql_CYQ.Data V5 从入门到放弃ORM系列
背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...
- cyq.data 连接mysql_CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用
背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...
- cyq.data 连接mysql_CYQ.Data 轻量数据层之路 框架如何应对数据库变化
内容: 请问大家是如何处理以下问题: Model是数据库表的实体映射,当系统的需求出现新的变换,例如增加新的功能时数据库需要增加新的字段, 或需要去掉和更换某些旧的功能,那么对应的数据库字段肯定是会修 ...
- cyq.data 连接mysql_CYQ.Data 轻量数据层之路 使用篇一曲 裸身走天涯(十二)
其实本来是不想写使用帮助的,因为在以下的文章中,都有大量的示例存在: 不过很多人还是很懒啊,一进群就用问怎么用. 发个文章路径让其看吧,又说太麻烦,使用复杂,于是想了想,还是写写使用教程,让这部分懒人 ...
- subsonic 3.0 mysql_SubSonic3.0使用外连接查询时查询不出数据的问题修改-阿里云开发者社区...
今天在开发时,要使用到外连接查询,如图 老是查不出数据,所以就追踪了一下代码,发现查询后生成的SQL语句变成了内连接了,真是晕 然后继续Debug,发现原来SqlQuery类在调用LeftInnerJ ...
- cyq.data 连接mysql_CYQ.Data 轻量数据访问层(一) 概述
在很久很久以前.2007年底,我曾发布过CYQ.Data.DLL,那时的学术氛围很浓,评论的也比较重 在那里,我曾做过一些简介与使用方法的帮助 在这个系列中,我将一步一步开源并讲解实现的过程,由于文章 ...
最新文章
- MYSQL数据库字母数字混合字段排序问题
- java inputstream的read一次只能读到一个字节_20210118-JAVA面试题
- 【Learning Spring 5.0】001 Spring架构及Spring介绍
- linux ubuntu kubuntu与xubuntu等各版本差别
- mysql 区分大小写(大小写敏感)配置
- 正则表达式匹配所有script及其内容_VLOOKUP函数进阶用法:模糊一对多匹配之匹配带关键字的所有内容...
- 解析BF(普通串模式匹配算法)算法
- 如何出(改编)一道ACM算法题?
- Vue2.x 踩坑与总结
- BZOJ 1500 维修数列
- 算法总结之 一行代码求两个数的最大公约数
- C++新特性探究(18.3):C++11 weak_ptr智能指针
- 饼状图改变数据显示位置_Tableau--饼图大作战
- 法兰克机械手手动操作_谈谈多工位冲床机械手的操作方法
- 你的目的是什么是谁指使你_魔家四将的师傅是谁?隐藏的高人,只配合太上老君的布局...
- 【你的数据库危机四伏 】
- 幼儿识字软件测试自学,2016幼儿识字APP哪家强?最新测评出炉!
- 基于TI CC2540汽车检测蓝牙4.0 BLE方案
- RainMeter — 使用 NotePad ++ 编辑皮肤文件
- vue2中监听watch的写法汇总
热门文章
- linux中修改mycat端口,mycat修改配置之后需要重启吗
- 雷军直播带货近2亿:谁说内向的程序员不配拥有诗和远方?
- Thinkpad利用APS玩出重力感应
- python批量生成视频_百万点赞怎么来?Python批量制作抖音的卡点视频原来这么简单!...
- 如何鉴别币圈的骗子?
- python处理excel数据(含日期数据)
- Python使用numpy与pandas计算数组元素的变化率
- Netsuite案例:达美乐比萨
- 中基鸿业家庭如何进行理财规划
- MS Enterprise Library 与 Log4Net的比较