cyq.data 连接mysql_CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)

本文介绍了CYQ.Data V5版本的文本数据库如何支持SQL语句操作,包括Insert、Select、Update、Delete等。通过解析SQL语法,转换为对MDataTable的操作,实现了对文本数据库的基本CRUD功能。示例代码展示了如何执行SQL并获取结果。此外,还讨论了使用文本数据库存储系统错误日志的优势和CodeFirst模式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

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

edb09ce1f9a33b279769bac10a01152b.png  

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

b3c0b72e5419c3b7ea0bbad2425f5705.png

再添加一行数据:

3d970729d16afa652a448096bd7f0393.png

最后更新这行1行数据:

9c13fa2fff7228d143f16203b8088f50.png

最终再查询显示一次:

aa8577a38fda1371993e60a869fe7fd0.png   

至此,整个基本的SQL语法解析和实现就告终了,至于什么GroupBy,多表,[前言: 这两天有点感冒状态,除了以前折腾 微博粉丝精灵腾到三更,最近也在折腾个别工具到四更,偶尔心来心潮,赶紧写写文章,最近有很多朋友对 CYQ.DataV5里的文本数视图,函数之类的,就在文本数据库的能力之外了。

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

下面再补充一下ErrogLogs这个日志说明: 默认的CodeFirst,简单说就是你指定哪种数据库类型,就会自动创建相应的表结构,然后把执行SQL的错误信息写到该日志里,方便查询分析和解决。

以前,我习惯把日志的链接写成:

其实就是指向Conn(CYQ.Data默认的主数据库配置顶),这样就把日志表放到和主数据库表同一个数据库。。

结果有时候,如果主数据库挂掉,异常日志就无法记录了,所以建议是存到其它数据库。

但有了文件数据库之后,用文本来存储日志,看似是个不错的选择,而且操作也相当方便。

CodeFirst时,如果有数据(第一条数据产生时,自动根据实体产生了表结构,如果是文本,在指定的目录下出来这个)

1c3686ae9bc269e34d30ce8dd38e80fa.png   当然了,除了比较标准的,是自动生成的,如果你是自己手工创建,可以新建一个表名.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值