Clone框架:http://www.52chloe.com/Wiki/Document/3324802610879266816

Clone框架支持多种数据库,我用的是sql server

  基本查询:

1.取前几条数据

  sql server的sql 语句是:

  1. UPDATE dbo.POM_Entry SET Status = 'Suspend' WHERE EntryCode IN
  2. (SELECT TOP EntryCode FROM dbo.POM_Entry WHERE OrderCode = 'POM20170401151750740865' AND status = 'Issued' ORDER BY OrderIndex desc);

  用Clone框架:.TakePage(1,20)

  1. //将该订单下相应个数的状态为下发的工单的状态改为暂停
  2. public void SuspendAmount(string orderCode, int SuspendAmount)
  3. {
  4.        //加事务
  5. this.DbContext.DoWithTransaction(() =>
  6. {
  7.           //查询出该订单下状态为下发的工单,并按排序号倒叙排序,取出SuspendAmount个工单,将其状态设为暂停
  8. List<POM_Entry> Lq = this.DbContext.Query<POM_Entry>().FilterDeleted()
  9. .Where(a => a.OrderCode == orderCode && a.Status == "Issued")
  10. .OrderByDesc(a => a.OrderIndex).TakePage(, SuspendAmount).ToList();
  11. var entryAccount = Lq.Count;
  12. for (var i = ;i < entryAccount; i++)
  13. {
  14.             //更新语句a => a.EntryCode == entryCode中entryCode不能用Lq[i].EntryCode代替,必须先取出来
  15. var entryCode = Lq[i].EntryCode;
  16. this.DbContext.Update<POM_Entry>(a => a.EntryCode == entryCode, a => new POM_Entry()
  17. {
  18. Status = "Suspend"
  19. });
  20. }
  21. });
  22. }

2.调用存储过程

  存储过程如下:

  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. --创建生成工单的存储过程
  6. CREATE PROCEDURE [dbo].[P_POM_CreateEntry]
  7. @OrderCode nvarchar(),--输入参数订单号
  8. @CreateUserId NVARCHAR(),--输入参数创建者ID
  9. @vMsg INT OUTPUT --输出参数
  10. AS
  11. BEGIN
  12. SET NOCOUNT ON;
  13. DECLARE --声明变量
  14. @MaterielNo NVARCHAR(),
  15. @NumberSegmentStart INT,
  16. @NumberSegment INT,
  17. @CellCode NVARCHAR(),
  18. @PPRCode NVARCHAR(),
  19. @Type NVARCHAR(),
  20. @OrderIndex INT = 1,
  21. @Amount FLOAT=
  22.  
  23. --根据订单号查询 给变量赋值
  24. SELECT
  25. @MaterielNo = dbo.POM_Order.MaterielNo,
  26. @NumberSegmentStart = dbo.POM_Order.NumberSegmentStart,
  27. @CellCode = dbo.POM_Order.CellCode,
  28. @PPRCode = dbo.POM_Order.PPRCode,
  29. @Type = dbo.POM_Order.[Type],
  30. @Amount= dbo.POM_Order.Amount
  31. FROM dbo.POM_Order WHERE OrderCode = @OrderCode;
  32. SET @NumberSegment = @NumberSegmentStart
  33. --加入事务
  34. begin tran;
  35. begin TRY
  36. --循环号段
  37. DELETE FROM dbo.POM_Entry WHERE OrderCode = @OrderCode;--如果存在删除
  38. WHILE @NumberSegment < @NumberSegmentStart+CONVERT(INT,@Amount)--重点:int类型和float类型的直接相加 会出错,得做一下类型转换
  39. BEGIN
  40. INSERT dbo.POM_Entry
  41. ( Id ,
  42. OrderCode ,
  43. EntryCode ,
  44. ProductUniqueCode ,
  45. CellCode ,
  46. PPRCode ,
  47. Type ,
  48. Status ,
  49. PlanStartTime ,
  50. PlanEndTime ,
  51. ActualStartTime ,
  52. ActualEndTime ,
  53. OrderIndex,
  54. CreationTime ,
  55. CreateUserId ,
  56. IsEnabled ,
  57. IsDeleted ,
  58. DeletionTime ,
  59. DeleteUserId
  60. )
  61. VALUES ( NEWID() , -- Id - nvarchar() --调用函数
  62. @OrderCode , -- OrderCode - nvarchar()
  63. [dbo].[f_GetNumber]('EN', floor(RAND()*)) , -- EntryCode - nvarchar() --调用函数f_GetNumber
  64. [dbo].f_GetProductUniqueCode(@MaterielNo, @NumberSegment) , -- ProductUniqueCode - nvarchar()--调用函数f_GetProductUniqueCode
  65. @CellCode , -- CellCode - nvarchar()
  66. @PPRCode , -- PPRCode - nvarchar()
  67. @Type , -- Type - nvarchar()
  68. 'New' , -- Status - nvarchar()
  69. NULL , -- PlanStartTime - datetime
  70. NULL , -- PlanEndTime - datetime
  71. NULL , -- ActualStartTime - datetime
  72. NULL , -- ActualEndTime - datetime
  73. @OrderIndex , -- OrderIndex - int
  74. GETDATE() , -- CreationTime - datetime
  75. @CreateUserId , -- CreateUserId - varchar()
  76. , -- IsEnabled - bit
  77. , -- IsDeleted - bit
  78. NULL , -- DeletionTime - datetime
  79. NULL -- DeleteUserId - varchar()
  80. );
  81. SET @NumberSegment += ;
  82. SET @OrderIndex += ;
  83. end
  84. commit;--成功
  85. SET @vMsg = ;
  86. end TRY
  87. begin catch
  88. rollback tran;--失败回滚
  89. SET @vMsg = ;
  90. end catch
  91. END

用Clone框架:

  1. public int CreateEntry(string orderCode) {
  2. DbParam[] pas = new DbParam[];
  3. pas[] = new DbParam("@OrderCode", orderCode);
  4. pas[] = new DbParam("@CreateUserId",this.Session.UserId);
  5. pas[] = new DbParam("@vMsg", null, typeof(int)) { Direction = ParamDirection.Output };
  6. DbContext.SqlQuery<int>("P_POM_CreateEntry", CommandType.StoredProcedure, pas).FirstOrDefault();
  7. return (int)pas[].Value;
  8. }

3.对时间类型的模糊查询

  sql server 的sql语句:

  1. SELECT ISNULL(COUNT(1), 0) as amount FROM dbo.POM_Entry WHERE convert(varchar(10), ActualEndTime, 121) = '2017-04-01' AND Status = 'Complete'

用Clone框架:Clone框架有.Contains(),表示like模糊查询,但是不适用于Date类型的字段ActualEndTime,所以我只能写sql语句了

  1. /*
  2. 平台首页:月产量统计图获取本月每日的产量
  3. */
  4. public string GetFinishAmountByMonth(string year,int month,int day)
  5. {
  6. string MonthStr = "";
  7. var dataStr = "";
  8. int vliday = ;
  9. if (month < )
  10. {
  11. MonthStr = "" + month.ToString();
  12. }
  13. else
  14. {
  15. MonthStr = month.ToString();
  16. }
  17. for(; vliday <= day;vliday ++ )
  18. {
  19. string NowDate = "";
  20.  
  21. if ( vliday < )
  22. {
  23. NowDate = year + "-" + MonthStr + "-" + "" + vliday.ToString();
  24. }
  25. else
  26. {
  27. NowDate = year + "-" + MonthStr + "-" + vliday.ToString();
  28. }
  29. //SELECT ISNULL(COUNT(1), 0) as amount FROM dbo.POM_Entry WHERE convert(varchar(10), ActualEndTime, 121) = '2017-04-01' AND Status = 'Complete'
  30. string sql = "SELECT ISNULL(COUNT(1), 0) as amount FROM dbo.POM_Entry WHERE convert(varchar(10), ActualEndTime, 121) = '{0}' AND Status = 'Complete'";
  31. POMDayProduct data = this.DbContext.SqlQuery<POMDayProduct>(string.Format(sql, NowDate),null).ToList()[];
  32. if ( vliday != day)
  33. {
  34. dataStr = dataStr + data.amount + ",";
  35. }
  36. else
  37. {
  38. dataStr = dataStr + data.amount;
  39. }
  40.  
  41. }
  42. return dataStr;
  43. }

注意:

1.这个方法得频繁的和数据库交互,不是很好;

2.对时间模糊查询时,时间字符串必须是'2017-04-09'这样的格式,也就是说'2017-4-9'这种格式是查不出来数据的,

所以我对月,日做了判断,小于10==>拼成'0x';

3.时间字符串类型的转换,充分利用convert(varchar(10), ActualEndTime, 121),这个函数是将ActualEndTime日期类型转化为10位的字符串时间:'2017-04-09';

4.查询某一天的记录直接利用convert()函数等值判断就可以了,不需要like了,代码中的"= '{0}'"就是了,而且" '{0}'"表示第一个参数NowDate,一定要加单引号,不然数据库也是查询不出来的;

5.SELECT ISNULL(COUNT(1), 0) as amount 也要注意, ISNULL(COUNT(1), 0)的数据类型是int类型的,所以POMDayProduct实体里的属性amount的类型(as amount) 也一定必须是int类型的;

6.最后说一下,为了避免和数据库多次交互,这个方法本来我是写成了存储过程,但无奈返回的是"1,2,3,4,,,,,"类型的字符串,而我用Clone框架的this.DbContext.SqlQuery<T>,T不能使用string,必须是一个实体,故放弃了存储过程

持久层框架Clone的更多相关文章

  1. MyBatis持久层框架使用总结

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2 ...

  2. MyBatis持久层框架使用总结 转载

    MyBatis持久层框架使用总结   MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...

  3. Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis

    简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...

  4. java持久层框架mybatis如何防止sql注入

    看到一篇很好的文章:http://www.jfox.info/ava-persistence-framework-mybatis-how-to-prevent-sql-injection sql注入大 ...

  5. .NET平台下,关于数据持久层框架

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  6. 菜鸟学习Hibernate——持久层框架

    一.Java操作数据库的阶段. Java对数据库进行操作经历了三个阶段. 1.1操作JDBC阶段 这个阶段就是利用JDBC类来操作数据库.这个阶段出现了两个问题: 代码过度重复:在每一次数据库操作的是 ...

  7. .NET平台数据持久层框架

    在.NET平台下的几个数据持久层框架: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS.NET 5.DAAB 6.DLinq

  8. Hibernate数据库持久层框架

    Hibernate是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hib ...

  9. 持久层框架之MyBatis

    1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

随机推荐

  1. vue --- 关于多个router-view视图组件,渲染同一页面

    vue.js多视图的使用,可以提高网页组件化,模块化 比如使用多视图,可以将网站页面封装header.footer.navbar等多个公共部分, 遇到修改公共部分的文案信息等数据的时候,不再需要逐一修 ...

  2. Python中functools模块函数解析

    Python自带的 functools 模块提供了一些常用的高阶函数,也就是用于处理其它函数的特殊函数.换言之,就是能使用该模块对可调用对象进行处理. functools模块函数概览 functool ...

  3. 又一个设计工具 Framer X Preview

    又一个设计工具 Framer X Preview 所说比 Sketch 和 Figma 都要好用,不知道是不是真的 ~~ To give you a little background, I've b ...

  4. Paper-[arXiv 1710.03144]Island Loss for Learning Discriminative Features in Facial Expression

    [arXiv 1710.03144]Island Loss for Learning Discriminative Features in Facial Expression ABSTRACT 作者在 ...

  5. Guitar Pro中文版下载,你想要的,都在这啦!

    我的音乐我做主!Guitar Pro7中文版的发布为更多音乐爱好者带来更多更优质的体验!为帮助所有吉他爱好者学习.绘谱.创作而设计的音乐空间!为前所未有的音乐盛听而震撼,音乐才子,等的就是你! Gui ...

  6. 第十二章 Python网络编程

    socket编程 socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket ...

  7. day09-1 列表,元祖的内置方法

    目录 列表类型的内置方法 作用 定义方式 方法 优先掌握 需要掌握 储存一个值or多个值 有序or无序?(有序:有索引, 无序:无索引) 可变or不可变(可变:值变id不变,不可变:值变id也变) 元 ...

  8. 转载:常用 Git 命令清单

    转载:常用 Git 命令清单 原文地址:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html  作者: 阮一峰 我每天使用 Git , ...

  9. B-Tree概念

    记录下学习B-Tree: concept:(m-阶) 1.  根节点 孩子数 ( 2 <= N <= m) 根节点key数([m/2] - 1 <= n <=  m -1) 2 ...

  10. xmllint命令

    xmllint是一个很方便的处理及验证xml的工具,linux下只要安装libxml2就可以使用这个命令,下面整理一些常用功能 1. --format 此参数用于格式化xml,使其具有良好的可读性. ...