CYQ.Data 数据层框架CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。 |
CYQ.Data V5 MAction新增加SetExpression方法说明
快速使用帮助 |
|
|
| #楼主 |
需求: 在之前的CYQ.Data版本中,如果你要更新某一个字段的值+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种不同的需求了,方便性提升了不少。 |
发表评论
论坛公告
帖子搜索
最新帖子
最新评论
- 请教博主。我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年就过了!!!!