MySoft.Data从入门到精通系列(五)【数据更新】
前一章讲了如何利用MySoft.Data进行数据的插入,利用DbSession可以实现各种数据增、删、改、查等各种复杂的处理,本章着重讲解一下数据的更新:
数据更新在日常开发中占据中非常重要的地位,尽次于查询。下面就讲解一下如何利用DbSession来进行数据的更新。
继续引用前面的DbSession配置,如下:
代码/// <summary>/// 数据库访问类/// </summary>public static class DataAccess{/// <summary>/// 通过配置节来实例化DbSession/// </summary>public static readonly DbSession DefaultSession = new DbSession("DataExample");/// <summary>/// 通过自定义类来实例化DbSession/// </summary>public static readonly DataExample ExampleSession = new DataExample();}/// <summary>/// DataExample会话类/// </summary>public class DataExample : DbSession{public DataExample(): base("DataExample"){ #if DEBUGthis.RegisterSqlLogger(log =>{System.IO.File.WriteAllText("c:\\log.txt", log);}); #endif}}
下面还是利用DataAccess.ExampleSession来进行操作:
一、强类型的数据更新
下面的操作以Products实体为例进行操作:
1、单个实体数据更新
代码 //实例化一个Products对象Products product = new Products(){ProductID = 1,ProductName = "测试产品1"};//更新单个对象product.Attach();DataAccess.ExampleSession.Save(product);
2、批量实体数据更新
代码 //实例化一组Products对象List<Products> list = new List<Products>();for (int index = 0; index < 10; index++){list.Add(new Products(){ProductID = index,ProductName = "测试产品" + index});}//批量更新数据DbBatch batch = DataAccess.ExampleSession.BeginBatch(10);list.ForEach(item =>{item.Attach();batch.Save(item);});batch.Process();
3、带事务单个实体更新(MySoft.Data内置实现DbTrans)
代码 //实例化一个Products对象Products product = new Products(){ProductID = 1,ProductName = "测试产品1"};//使用事务进行数据插入using (DbTrans trans = DataAccess.ExampleSession.BeginTrans()){try{product.Attach();trans.Save(product);trans.Commit();}catch{trans.Rollback();}}
4、带事务批量实体更新(MySoft.Data内置实现DbTrans)
代码//实例化一组Products对象List<Products> list = new List<Products>();for (int index = 0; index < 10; index++){list.Add(new Products(){ProductID = index,ProductName = "测试产品" + index});}//使用事务进行批量数据插入using (DbTrans trans = DataAccess.ExampleSession.BeginTrans()){try{DbBatch batch = trans.BeginBatch(10);list.ForEach(item =>{item.Attach();batch.Save(item);});batch.Process();trans.Commit();}catch{trans.Rollback();}}
5、创建外部数据库链接方式更新
代码//实例化一个Products对象Products product = new Products(){ProductID = 1,ProductName = "测试产品1"};using (System.Data.Common.DbConnection conn = DataAccess.ExampleSession.CreateConnection()){//更新单个对象product.Attach();DataAccess.ExampleSession.SetConnection(conn).Save(product);}
注:批量插入可以采用同样的方法处理!
6、创建外部数据库事务方式更新
代码//实例化一个Products对象Products product = new Products(){ProductID = 1,ProductName = "测试产品1"};using (System.Data.Common.DbTransaction trans = DataAccess.ExampleSession.BeginTransaction()){try{//更新单个对象product.Attach();DataAccess.ExampleSession.SetTransaction(trans).Save(product);trans.Commit();}catch{trans.Rollback();}}
注:批量更新可以采用同样的方法处理!
当实体存在时更新,否则插入的处理方式:
代码 Products product = new Products(){ProductID = 1,ProductName = "测试产品"};DataAccess.ExampleSession.InsertOrUpdate(product);
以上操作相应的都可以使用事务来处理
二、UpdateCreator数据更新
通过更新创建器同样也可以达到上面的效果,也可以进行泛型方式进行数据插入,一般情况下创建器用于没有建立对象实体时直接对表和字段的操作。
1、通过实体更新实体
代码 UpdateCreator uc = UpdateCreator.NewCreator().From<Products>().SetEntity<Products>(product, true);DataAccess.ExampleSession.Excute(uc);
2、通过字符串表与字段更新数据
代码 UpdateCreator uc = UpdateCreator.NewCreator().From("Products").AddUpdate("ProductName", "测试产品").AddWhere("ProductID", 1);DataAccess.ExampleSession.Excute(uc);
三、用户自定义更新方式
DataAccess.ExampleSession.Update<Products>(Products._.ProductName, "测试产品", Products._.ProductID == 1);
条件可以多个组件产生,如下:
WhereClip where = Where.All;
if(条件一) where = where && Products._.ProductID == 1;
if(条件二) where = where && Products._.ProductID == 2;
//ProductID为1和2(相当于In操作)
if(条件三) where = where || Products._.ProductID.In(1,2);
//ProductID不为1和2(相当于Not In操作)
if(条件四) where = where || !Products._.ProductID.In(1,2);
……
DataAccess.ExampleSession.Update<Products>(Products._.ProductName, "测试产品", where);
以上通过创建器的方式同样可以用事务来操作 trans.Excute(uc);
这里只是简单的介绍了一下,还有更多的功能需要用户使用时才能体会到。
数据的更新操作就讲解到这里,下一章将讲解数据的删除(Delete)操作
有什么问题可以到此处:MySoft组件问题反馈与疑难解答
转载于:https://www.cnblogs.com/maoyong/archive/2010/04/13/1710913.html
MySoft.Data从入门到精通系列(五)【数据更新】相关推荐
- GPU 编程入门到精通(五)之 GPU 程序优化进阶
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 博主由于工作当中的需要,开始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GP ...
- ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)
文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...
- OpenShift从入门到精通系列之一:通过OpenShift实现数字化转型
OpenShift从入门到精通系列之一:通过OpenShift实现数字化转型 一.企业数字化转型之PaaS 二.企业数字化转型之DevOps 三.企业数字化转型之微服务 四.微服务架构的主要类型 五. ...
- Simulink仿真入门到精通(五) Simulink模型的仿真
本系列教程是根据孙忠潇编著的<<Simulink仿真及代码生成技术入门到精通>>学习笔记. 目录 Simulink仿真入门到精通(一) Simulink界面介绍 Simulin ...
- Oracle 从入门到精通系列 - 前言
Oracle 从入门到精通系列 - 前言 前言 一.需要具备的知识和工具 1.必须的 2.非必须的(能有最好) 二.大家能学到什么以及能学到什么程度 1.计划 2.能学到什么 3.能学到什么程度 三. ...
- RK3399平台入门到精通系列讲解 - 总目录
总目录 欢迎大家来到内核笔记的<RK3399平台开发入门到精通系列讲解>,开始前博主先列出RK3399平台学习的大纲,同时这也可以作为大家学习RK3399内核与安卓框架的参考.下面蓝字都是 ...
- PostgreSQL数据库从入门到精通系列之五:深入理解lsn_proc、lsn_commit、lsn、txId、ts_usec
PostgreSQL数据库从入门到精通系列之五:深入理解lsn_proc.lsn_commit.lsn.txId.ts_usec 一.深入理解lsn_proc 二.深入理解lsn_commit 三.深 ...
- Vue3+TypeScript从入门到精通系列之:泛型接口
Vue3+TypeScript从入门到精通系列之:泛型接口 一.TypeScript的泛型接口代码 二.TypeScript的泛型接口代码转化为js代码 三.泛型接口.js输出如下所示 一.TypeS ...
- 【ArcGIS遇上Python】从入门到精通系列之第一章:ArcGIS Python简介
文章目录 1. Python简介 2. Python的特点 3. ArcGIS的脚本语言 4. ArcGIS中的Python脚本编辑器 1. Python简介 Python是一种跨平台的计算机程序设计 ...
最新文章
- Webwork 学习之路【07】文件上传下载
- JAVA应用开发MQ实战最佳实践——Series2:消息队列RocketMQ性能测试案例
- 《深入浅出数据分析》为读者送上了章回小说的精彩
- Java 字符的验证
- WPF 创建无边框的圆角窗口
- 前端之 JavaScript 基础
- 论文阅读课1-Attention Guided Graph Convolutional Networks for Relation Extraction(关系抽取,图卷积,ACL2019,n元)
- oracle solaris 内核 源码,直接安装内核区域
- 1-7:学习shell之透过shell看世界
- android: ListView设置emptyView 误区
- 把ts自动合并 下载网页视频并自动合成视频
- 全减器及其相关概念的理解
- 艺工交叉——达芬奇只会画画吗?
- 软件测试常见面试题分享
- 海洋cms标签-海洋cms模板标签手册-海洋cms模板标签全套
- 《C++ Primer 第5版》-11.2关联容器概述-康奈尔笔记
- 首期「OSCHINA 开源软件趋势榜」榜单公布 | 有奖征文等你来
- PS压缩1寸照片大小降低到50KB以下的方法
- 计算机专业试讲10分钟教案,10分钟试讲教案模板.doc
- 关于virtualbox虚拟电脑控制台严重错误解决方法。。。(博客园搬家至此,尚未整理)(六)