Linq无聊练习系列8---开放式并发事务,null和 DateTime,string操作练习
/*********************开放式并发事务,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操作练习的更多相关文章
- Linq无聊练习系列6--Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习
/*********************Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习******* ...
- Linq无聊练习系列1--where练习
linq主要有3种,linq to sql,linq to XML,Linq to Object linq to sql. 这里没有通过相应的类,生成相应的数据库中的表.没有用流行的编码优先. 只是为 ...
- Linq无聊练习系列7----Insert,delete,update,attach操作练习
/*********************Insert,delete,update,attach操作练习**********************************/ ...
- Linq无聊练习系列5--OrderBy ,Groupby练习
/**************OrderBy ,Groupby练习*******************/ //按学生的总分数按降序排列排序 ...
- Linq无聊练习系列4--join练习
/**************join 练习*******************/ //对于1对多关系 var list =from c in ctx.T ...
- Linq无聊练习系列3--聚合函数练习
/**************聚合函数 练习*******************/ //求学生的总数量 var list = ctx.T_Student. ...
- Linq无聊练习系列2--select/distinct练习
void dataBindByWhere() { /**************select/distinct 练习*******************/ //获 ...
- Code First开发系列之管理并发和事务
返回<8天掌握EF的Code First开发>总目录 本篇目录 理解并发 理解积极并发 理解消极并发 使用EF实现积极并发 EF的默认并发 设计处理字段级别的并发应用 实现RowVersi ...
- EF中的开放式并发(EF基础系列--28)
好久没更新EF这个系列了,现在又重新开始. 这次学习,开放式并发.首先拿出数据库脚本: 说明一下,这个数据库脚本是之前的章节中稍作修改的: USE [SchoolDB] GO /****** Obje ...
随机推荐
- 标签(Tag)的各种设计方案
标签(Tag)的各种设计方案 首先,标签(Tag)是什么? 我的理解:用来具体区分某一类内容的标识,和标签类似的一个概念是分类(Category),有一个示例可以很好的区分它们两个,比如人类分为:白种 ...
- 高性能网络server--I/O复 select poll epoll_wait之间的差
一个.select 方式作为收集,最多只能监控1024描述叙事断裂的文件,内部使用位操作,相应的位置1或设置0,必须是可读.可写.三类除单独的事件,内部查询方法.将全部的套接字从内核到用户空间之间进行 ...
- iOS8开发~UI布局(二)storyboard中autolayout和size class的使用具体解释
一.概要:前一篇初步的描写叙述了size class的概念,那么实际中怎样使用呢,以下两个问题是我们一定会遇到的: 1.Xcode6中添加了size class,在storyboard中怎样使用? 2 ...
- [ 夜间模式 ] NightVersion
DKNightVersion框架.重写管理类 & 控件的分类!--可重写{ 使用GCD.runtime.delegate等 & 工具类的创建 } ================ 1. ...
- 换行符以及for循环的优化
string str = ""; for (int i = 0; i < _errlistCusEmailInfo.Count; i++) ...
- 如何清除应用程序承载 WebBrowser 控件时缓存
原文:如何清除应用程序承载 WebBrowser 控件时缓存 http://support.microsoft.com/kb/262110/zh-cn察看本文应用于的产品 function loadT ...
- Atitit.软件GUIbutton与仪表盘--db数据库区--导入mysql sql错误的解决之道
Atitit.软件GUIbutton与仪表盘--db数据库区--导入mysql sql错误的解决之道 Keyword::截取文本文件后部分 查看提示max_allowed_packet限制 Targe ...
- JS正则替换字符串
1.只替换第一次出现的字符: text.replace(/javascript/i, "JavaScript"); //正则用//来将正则包起来 i表示区分大小写 2.全局替换: ...
- Windows socket之最简单的socket程序
原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. soc ...
- Performing User-Managed Database-18.4、Restoring Datafiles and Archived Redo Logs
18.4.Restoring Datafiles and Archived Redo Logs 假定介质故障损坏的一个或多个数据文件,数据文件必须恢复损坏的文件之前恢复. 该位置是不是想恢复原来姿势. ...