博客
关于我
CYQ.Data V5 MAction新增加SetExpression方法说明
阅读量:421 次
发布时间:2019-03-06

本文共 1497 字,大约阅读时间需要 4 分钟。

需求:

 

 
在之前的版本中,如果你要更新某一个字段的值+1;
 
解决方案:

 

 
1:如果用MAction操作,可能会如下代码:
 
using(MAction action=new MAction(表名))
{
if(action.Fill(id))
{
    action.Set(字段名,action.Get<int>(字段名)+1);
    action.Update();
}
}
 
简单的说,就是需要查询出值,然后再用原值进行相关的操作,用这种代码代价就是要多查一次。
 
 

2:另一种方式高性能的是使用MProc来直接操作Sql语句,可能会如下代码:

 
using(MProc proc=new Proc("Update 表名 set 字段名=字段名+1"))
{
proc.ExeNonQuery();
}
 
用MProc基本是万能的了,直接处理SQL语句和存储过程。。。

 

 
大伙习惯了MAction多,所以希望MAction也有个顺路功能:
 
不过好多人习惯用MAction,都图个方便,连条SQL语句也想省一下。。。
事实上,我本人在多个项目中,也有这种需求,当然最后都是直接使用MProc处理了。
 
很多时候,我一直在寻找一种最优方式,能处理这种值+1,值-1的问题,不过每每看着架构,不好下手,一直没找到切入点和使用方法。
 
 

比如一开始想的:

 
using(MAction action=new MAction(表名))
{
action.Set(字段名,“[字段名]+1”);
action.Update("id=1");
}
 
但是这种方式,实现起来,没想象的简单,而且这值是字符串还是表达式?分不清也说不明,所以一直卡在以何种使用方式上。
 
 

CYQ.Data 框架设计原则:

 
CYQ.Data 框架的设计,很多时候,是先思考使用的方法,再去想怎么实现的,先想象出最简单的使用方式,再去想能不能实现,而不是实现了一个功能,却很难使用。
为此,但网友又对我提出这种需求的要求时,我又花了N个小时,看着代码发呆,每次我思考问题或有某项功能时,我都会看着代码发呆几个小时。。当然是在不停的思考。。
 
 

后来终于设计出最终解决方案:

 
using(MAction action=new MAction(表名))
{
action.Set(字段名,值);
action.SetExpression(“字段名=字段名+1”);
action.SetExpression(“字段名=len(字段名)+1”);
action.Update();
}
 
 

通过增加一个表达式方法,基本上有点万能了,事实在后端,组成的Update语句大体为:

 
update 表名 set 表达式,字段名=@字段名 where ...
 
 

简单说,就是表达式只是简单的被附加到原来的set的后面,最终被组装成SQL执行,当然了,如果你想高级点用参数化也是可以的。

 
            using (MAction action = new MAction("Blog_Class"))
            {
                action.SetExpression("count=count+@Value");//表达式升级带参数化。
                action.SetPara("Value", 2, DbType.Int32);//设置参数化值
                action.Update();
            }
 
 

到此,基本上有表达存在,可以处理N种不同的需求了,方便性提升了不少。

 

补充: 

不小心把文章“只允许注册用户访问”给打上勾了,结果发现注册用户的阅读数仅88,根据统计,还有近27个是为了看文章被逼登陆了一下。

周末的行情访问量这么低?大伙都跑哪去偷情了?

 

转载地址:http://vuzuz.baihongyu.com/

你可能感兴趣的文章
Navicat中怎样将SQLServer的表复制到MySql中
查看>>
navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
查看>>
Navicat可视化界面导入SQL文件生成数据库表
查看>>
Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
查看>>
Navicat因导入的sql文件中时间数据类型有参数而报错的原因(例:datetime(3))
查看>>
Navicat如何连接MySQL
查看>>
navicat导入.sql文件出错2006- MySQLserver has gone away
查看>>
Navicat导入海量Excel数据到数据库(简易介绍)
查看>>
Navicat工具Oracle数据库复制 or 备用、恢复功能(评论都在谈论需要教)
查看>>
navicat工具查看MySQL数据库_表占用容量_占用空间是多少MB---Linux工作笔记048
查看>>
navicat怎么导出和导入数据表
查看>>
Navicat报错connection is being used
查看>>
Navicat报错:1045-Access denied for user root@localhost(using passwordYES)
查看>>
Navicat控制mysql用户权限
查看>>
navicat操作mysql中某一张表后, 读表时一直显示正在载入,卡死不动,无法操作
查看>>
Navicat连接mysql 2003 - Can't connect to MySQL server on ' '(10038)
查看>>
Navicat连接mysql数据库中出现的所有问题解决方案(全)
查看>>
Navicat连接Oracle出现Oracle library is not loaded的解决方法
查看>>
Navicat连接Oracle数据库以及Oracle library is not loaded的解决方法
查看>>
Navicat连接sqlserver提示:未发现数据源名并且未指定默认驱动程序
查看>>