/*********************开放式并发事务,null和 DateTime,string操作练习**********************************/

//所谓并发,就是两个或更多用户同时尝试更新同一数据库行的情形。并发冲突就是两个或更多用户同时尝试向一行的一列或多列提交冲突值的情形。
            //LINQ to SQL 支持三种事务模型,分别是显式本地事务:调用 SubmitChanges 时,如果 Transaction 属性设置为事务,则在同一事务的上下文中执行 SubmitChanges 调用。成功执行事务后,要由您来提交或回滚事务。与事务对应的连接必须与用于构造 DataContext 的连接匹配。如果使用其他连接,则会引发异常。
            //显式可分发事务:可以在当前 Transaction 的作用域中调用 LINQ to SQL API(包括但不限于 SubmitChanges)。LINQ to SQL 检测到调用是在事务的作用域内,因而不会创建新的事务。在这种情况下,<token>vbtecdlinq</token> 还会避免关闭连接。您可以在此类事务的上下文中执行查询和 SubmitChanges 操作。
            //隐式事务:当您调用 SubmitChanges 时,LINQ to SQL 会检查此调用是否在 Transaction 的作用域内或者 Transaction 属性是否设置为由用户启动的本地事务。如果这两个事务它均未找到,则 LINQ to SQL 启动本地事务,并使用此事务执行所生成的 SQL 命令。当所有 SQL 命令均已成功执行完毕时,LINQ to SQL 提交本地事务并返回。

// 并发冲突:如想更改“黄阳”的年龄为13,另外一个用户想更改为23
            var student1 = ctx.T_Student.First(s=>s.stuName=="黄阳");
            student1.stuAge = 13;

DB_StudentDataContext ctx1 = new DB_StudentDataContext();
            var student2 = ctx1.T_Student.First(s=>s.stuName=="黄阳");
            student2.stuAge = 23;

ctx.SubmitChanges();
            
            //在Linq to SQL中,有三种方法创建事务:

// 如果没有指定任何事务,那么当调用SubmitChanges方法时,DataContext会默认创建一个事务。
            //使用TransactionScope创建轻量级事务(需要引用 System.Transactions命名空间)
             //给DataContext的Transaction属性指定事务

//解决并发冲突(隐式事务)

try {

var student3 = ctx.T_Student.First(s=>s.stuName=="黄阳");
                student3.stuAge = 23;
                var student4 = ctx.T_Student.First(s => s.stuName == "黄阳");
                student4.stuAge = -1;
                ctx.SubmitChanges();

}
            catch {
            //进行处理
            }

//显示事务进行处理

using (TransactionScope scope = new TransactionScope())
            {
                try {
                    var student5 = ctx.T_Student.First(s => s.stuName == "黄阳");
                    student5.stuAge = 23;
                    var student6 = ctx.T_Student.First(s => s.stuName == "黄阳");
                    student6.stuAge = -1;
                    ctx.SubmitChanges();
                }
                catch {
                    //进行异常处理
                }
            }

// null操作:查询没有参加课程名为微机原理的所有学生
            var students = from s in ctx.T_Score
                           where s.T_Cource.courceName == "微机原理" && s.T_Student.stuNumber == null
                           select new
                           {
                               学生 = s.T_Student.stuNumber
                           };

// HasValue只能对非引用外键起作用
            var students0 = from s in ctx.T_Score
                           where s.T_Cource.courceName == "微机原理" && !s.score.HasValue
                           select new
                           {
                               学生 = s.T_Student.stuNumber
                           };
            var scores = from s in ctx.T_Score
                         where s.score.HasValue
                         select new {
                          studentNumber = s.stuNumber,
                          studentScore = s.score.Value,
                          stuCourece = s.courceNumber
                         };

//获取1989年生的孩子,由于数据库设计的缺陷,没有设置生日,设置的时年龄,其实这样并不合理,应该设置为出生年月日,这样能够更好的利用日期函数进行处理,如dateTime.Value.Year,dateTime.Value.Month,dateTime.Value.Day

//对string进行操作
            //连接操作,如对学生信息进行整理
            var studnetInfo = from s in ctx.T_Student
                              select new
                              {
                                  studentNumber = s.stuNumber,
                                  studentInfomation = s.stuSex + "," + s.stuName
                              };

//查询姓名字数为两个字的个数
            var userName = from s in ctx.T_Student
                           where s.stuName.Length == 2
                           select s;
            //查询名字为黄的学生

var students2 = from s in ctx.T_Student
                            where s.stuName.Contains("黄")
                            select s;

//查询每个人的名字里边出现阳的位置
            var studnets3 = from s in ctx.T_Student
                            select new {
                                username= s.stuName,
                                place = s.stuName.IndexOf("阳")
                            };
            //查询姓名以黄开头的人的信息
            var students4 = from s in ctx.T_Student
                           where s.stuName.StartsWith("黄")
                           select s;
            //查询姓名以阳结尾的人信息
            var students5 = from s in ctx.T_Student
                            where s.stuName.EndsWith("阳")
                            select s;
            //查询姓名为黄阳的学生的姓名第二个字
            var students6 = from s in ctx.T_Student
                            where s.stuName == "黄阳"
                            select s.stuName.Substring(2);

//查询姓名开始和结束为黄阳的学生信息
            var studnts7 = from s in ctx.T_Student
                           where s.stuName.Substring(0, 2) == "黄阳"
                           select s;
            //如果数据库里设置了英文信息,可以将其转化为大写或者小写,toUpper,toLower
            
            //可以查询姓名的姓,并移除前边和后边的空格

var students8 = from s in ctx.T_Student
                            select s.stuName.Substring(0, 1).Trim();

//在姓名为黄的后边加入一个冒号:
            var students9 = from s in ctx.T_Student
                            where s.stuName.Substring(0, 1) == "黄"
                            select s.stuName.Insert(1, ":");
            //在姓名为黄的学生姓名里,移除姓后边的字
            var students10 = from s in ctx.T_Student
                             where s.stuName.Substring(0, 1) == "黄"
                             select s.stuName.Remove(1);
            //在姓名为黄的学生姓名里,移除姓后边的第一个字
            var students11 = from s in ctx.T_Student
                             where s.stuName.Substring(0, 1) == "黄"
                             select s.stuName.Remove(1,2);
            //将性别为男的的学生全部把性别替换为女的
            var students12 = from s in ctx.T_Student
                             where s.stuSex=="男"
                             select new
                             {
                                 stuName = s.stuName,
                                 stuNumber=s.stuNumber,
                                 stuSex = s.stuSex.Replace(s.stuSex,"女")
                             };

Linq无聊练习系列8---开放式并发事务,null和 DateTime,string操作练习的更多相关文章

  1. Linq无聊练习系列6--Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习

    /*********************Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习******* ...

  2. Linq无聊练习系列1--where练习

    linq主要有3种,linq to sql,linq to XML,Linq to Object linq to sql. 这里没有通过相应的类,生成相应的数据库中的表.没有用流行的编码优先. 只是为 ...

  3. Linq无聊练习系列7----Insert,delete,update,attach操作练习

    /*********************Insert,delete,update,attach操作练习**********************************/            ...

  4. Linq无聊练习系列5--OrderBy ,Groupby练习

    /**************OrderBy ,Groupby练习*******************/                       //按学生的总分数按降序排列排序         ...

  5. Linq无聊练习系列4--join练习

    /**************join 练习*******************/            //对于1对多关系            var list =from c in ctx.T ...

  6. Linq无聊练习系列3--聚合函数练习

    /**************聚合函数 练习*******************/            //求学生的总数量            var list = ctx.T_Student. ...

  7. Linq无聊练习系列2--select/distinct练习

    void dataBindByWhere()        { /**************select/distinct 练习*******************/            //获 ...

  8. Code First开发系列之管理并发和事务

    返回<8天掌握EF的Code First开发>总目录 本篇目录 理解并发 理解积极并发 理解消极并发 使用EF实现积极并发 EF的默认并发 设计处理字段级别的并发应用 实现RowVersi ...

  9. EF中的开放式并发(EF基础系列--28)

    好久没更新EF这个系列了,现在又重新开始. 这次学习,开放式并发.首先拿出数据库脚本: 说明一下,这个数据库脚本是之前的章节中稍作修改的: USE [SchoolDB] GO /****** Obje ...

随机推荐

  1. 开展project 正常的生活之路

    相对刚走出学校的学生在其他行业工作,竞争力的薪酬,同时.并不断地不仅学习更新专业知识让你感到生活的充实,更满足了你那不让外人知的虚荣心.在刚出校门的几年中,你常常回头看看被你落在后面的同学们,在内心怜 ...

  2. HDU 3117 Fibonacci Numbers(围绕四个租赁斐波那契,通过计++乘坐高速动力矩阵)

    HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵高速幂) ACM 题目地址:HDU 3117 Fibonacci Numbers 题意:  求第n个斐波那契数的 ...

  3. 经典算法题每日演练——第十六题 Kruskal算法

    原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...

  4. Net下无敌的ORM

    Dapper ORM 用法—Net下无敌的ORM http://www.renfb.com/blog/2011/Article/335 假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上 ...

  5. DES加密深度优化——随机生成加密字符串

    DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.但该算法一旦密钥固定,加密的字符串也就随之固定,这不利于数据存储安全.而且用该方法加密后有一个 ...

  6. 从头开始学JavaScript (四)——操作符

    原文:从头开始学JavaScript (四)--操作符 一.一元操作符 1.自增自减操作符:分为前置型和后置型: 前置型:++a;--a; 后置型:a++;a--; 例: <script typ ...

  7. java_eclipse_maven_svn_主题彩色插件_全屏插件

    作为一名不算新手的猿猿,还来纠结IDE环境搭建实属不该,不过着实纠结了不少时间. target: eclipse + maven +svn + 设置默认编码+全屏 绕的路就不说了,直奔主题,由于mav ...

  8. Java数据结构与算法(2) - ch03排序(冒泡、插入和选择排序)

    排序需要掌握的有冒泡排序,插入排序和选择排序.时间为O(N*N). 冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移. 插入排序: 从排序过程的中间开始(程 ...

  9. 文件同步服务器,iis 集群 ,代码同步(一)

    文件同步服务器 BitTorrent Sync 有点像TeamViewer远程协助 软件,私钥连接. 使用版本就30 天,最近测试了,功能不够理想.有点遗憾,我觉得我可以写一个! 确实很好用.

  10. BestCoder Round #11 (Div. 2) 题解

    HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...