开发者社区> 泡泡浅眠> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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语句,然后显示相应的信息。

 

操作数据库,基本配置文件里指定日志的链接字符串是必不可少的内容:

<add name="LogConn" connectionString="txt path={0}App_Data"/> 

 

说明:把系统错误日志用文件数据库记录,CYQ.Data V5内置用了CodeFirst方式来实现异常的数据库执行日志错误:

表名为ErrorLogs
4个字段分别为:
1:ID,PageUrl,ErrorMessage,CreateTime。 

 

下面我们看界面:由于我的项目里本身就有日志,我们查询一下:

 

OK,下面我们删除所有数据库,执行成功后删除了5行数据:

再添加一行数据:

 最后更新这行1行数据:

 

 最终再查询显示一次:

 

 

至此,整个基本的SQL语法解析和实现就告终了,至于什么GroupBy,多表,视图,函数之类的,就在文本数据库的能力之外了。

功能的实现自己用两个Table去For还是while去实现自己需要的逻辑。 

 

下面再补充一下ErrogLogs这个日志说明:

复制代码
默认的CodeFirst,简单说就是你指定哪种数据库类型,就会自动创建相应的表结构,然后把执行SQL的错误信息写到该日志里,方便查询分析和解决。
以前,我习惯把日志的链接写成:
<add name="LogConn" connectionString="Conn"/> 
其实就是指向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


版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2013/05/02/3055049.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Oracle 数据库利用sql语句杀掉用户session进程,“ORA-01940: 无法删除当前连接的用户“问题解决办法
Oracle 数据库利用sql语句杀掉用户session进程,“ORA-01940: 无法删除当前连接的用户“问题解决办法
87 0
Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句
最近把平时在项目中常用到的数据库分页sql总结了下。大家可以贴出分页更高效的sql语句。
48 0
Oracle 数据库迁移一键创建源库表空间 SQL语句
⭐️ 获取需要迁移的用户可以参考:Oracle 数据泵迁移用户创建 SQL语句
45 0
Oracle 数据泵迁移用户创建 SQL语句
在进行数据泵迁移时,通常是按照用户进行导入导出,因此需要确认当前数据库中存在那些非系统用户!
54 0
Oracle 临时表空间 SQL语句
以下总结了关于 Oracle 数据库临时表空间的相关 SQL 语句:
74 0
Oracle 重做日志调整 SQL语句
Oracle 数据库安装之后,重做日志默认为 3组,如果需要新增删除,可以通过以下方式!
43 0
Oracle 查看数据库文件 SQL语句
Oracle 数据库文件主要分为: • 表空间数据文件(包括临时表空间和UNDO表空间) • 控制文件 • 日志文件(包括重做日志和standby日志)
53 0
Oracle 查看数据库字符集和客户端字符集 SQL 语句
Oracle 数据库分为数据库字符集和客户端字符集两种!
46 0
Oracle 查看 rman 备份情况 SQL 语句
RMAN 备份是 Oracle 数据库中最常用的一种备份方式!
76 0
T-SQL查询:语句执行顺序
原文:T-SQL查询:语句执行顺序 读书笔记:《Microsoft SQL Server 2008技术内幕:T-SQL查询》   ===============  T-SQL查询的执行顺序 ===============      =============== T-SQL查询的示意图...
791 0
+关注
2246
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载