zoukankan
html css js c++ java
步步为营VS 2008 + .NET 3.5(12) DLINQ(LINQ to SQL)之事务处理和并发处理
[索引页]
[源码下载]
步步为营VS 2008 + .NET 3.5(12) - DLINQ(LINQ to SQL)之
事务处理和并发处理
作者:
webabcd
介绍
以Northwind为
示例数据库
,DLINQ(LINQ to SQL)之
事务处理和并发处理
示例
TransactionAndConcurrency.aspx
<%
@ Page Language
=
"
C#
"
MasterPageFile
=
"
~/Site.master
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
TransactionAndConcurrency.aspx.cs
"
Inherits
=
"
LINQ_DLINQ_TransactionAndConcurrency
"
Title
=
"
事务处理和并发处理
"
%>
<
asp:Content
ID
="Content1"
ContentPlaceHolderID
="head"
runat
="Server"
>
</
asp:Content
>
<
asp:Content
ID
="Content2"
ContentPlaceHolderID
="ContentPlaceHolder1"
runat
="Server"
>
事务处理和并发处理详见:TransactionAndConcurrency.aspx.cs
</
asp:Content
>
TransactionAndConcurrency.aspx.cs
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
System.Xml.Linq;
using
DAL;
using
System.Transactions;
public
partial
class
LINQ_DLINQ_TransactionAndConcurrency : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
//
事务处理(DataContext.SubmitChanges()会做默认的事务处理)
TransactionDemo1();
//
事务处理(用DataContext.Connection.BeginTransaction()的方式做事务处理)
TransactionDemo2();
//
事务处理
TransactionDemo3();
//
并发处理
Concurrency();
}
/**/
///
<summary>
///
事务处理(DataContext.SubmitChanges()会做默认的事务处理)
///
</summary>
private
void
TransactionDemo1()
{
try
{
NorthwindDataContext ctx
=
new
NorthwindDataContext();
ctx.Categories.InsertOnSubmit(
new
Categories
{ CategoryName
=
"
test
"
, Description
=
"
test
"
}
);
ctx.Categories.InsertOnSubmit(
new
Categories
{ CategoryID
=
1
}
);
ctx.SubmitChanges();
}
catch
{ }
}
/**/
///
<summary>
///
事务处理(用DataContext.Connection.BeginTransaction()的方式做事务处理)
///
</summary>
private
void
TransactionDemo2()
{
int
?
categoryId
=
null
;
NorthwindDataContext ctx
=
new
NorthwindDataContext();
if
(ctx.Connection.State
!=
ConnectionState.Open)
{
ctx.Connection.Open();
}
System.Data.Common.DbTransaction tran
=
ctx.Connection.BeginTransaction();
ctx.Transaction
=
tran;
try
{
ctx.AddCategory(
"
test
"
,
"
test
"
,
ref
categoryId);
ctx.DeleteCategory(
1
);
tran.Commit();
}
catch
{
tran.Rollback();
}
}
/**/
///
<summary>
///
事务处理(用System.Transactions.TransactionScope做事务处理)
///
</summary>
private
void
TransactionDemo3()
{
int
?
categoryId
=
null
;
using
(TransactionScope tc
=
new
TransactionScope())
{
try
{
NorthwindDataContext ctx
=
new
NorthwindDataContext();
ctx.AddCategory(
"
test
"
,
"
test
"
,
ref
categoryId);
ctx.DeleteCategory(
1
);
tc.Complete();
}
catch
{ }
}
}
/**/
///
<summary>
///
并发处理
///
</summary>
private
void
Concurrency()
{
//
修改字段的UpdateCheck为Never,可在对象关系设计器(Object Relational Designer)中修改
//
[Column(Storage="_UnitPrice", DbType="Money")]
//
[Column(Storage="_UnitPrice", DbType="Money", UpdateCheck=UpdateCheck.Never)]
NorthwindDataContext ctx
=
new
NorthwindDataContext();
var products
=
ctx.Products;
foreach
(var p
in
products)
{
p.UnitPrice
++
;
}
try
{
//
表示即使发生冲突也要继续
ctx.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);
}
catch
(System.Data.Linq.ChangeConflictException e)
{
foreach
(System.Data.Linq.ObjectChangeConflict occ
in
ctx.ChangeConflicts)
{
Products p
=
(Products)occ.Object;
//
以当前客户端中的值为准
occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
//
以当前数据库中的值为准
occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);
//
如果数据库中的值没有发生变化,则以当前客户端中的值为准。否则,则以当前数据库中的值为准
occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges);
foreach
(System.Data.Linq.MemberChangeConflict mcc
in
occ.MemberConflicts)
{
//
当前客户端中的值
string
currentValue
=
mcc.CurrentValue.ToString();
//
原来数据库中的值
string
originalValue
=
mcc.OriginalValue.ToString();
//
当前数据库中的值
string
databaseValue
=
mcc.DatabaseValue.ToString();
//
以当前客户端中的值为准
mcc.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
//
以当前数据库中的值为准
mcc.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);
//
如果数据库中的值没有发生变化,则以当前客户端中的值为准。否则,则以当前数据库中的值为准
mcc.Resolve(System.Data.Linq.RefreshMode.KeepChanges);
}
}
}
//
表示只要发生冲突就不再继续
ctx.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
//
ctx.SubmitChanges();
}
}
OK
[源码下载]
查看全文
相关阅读:
【模拟】Gym
【二分】【半平面交】Gym
【凸包】【三分】Gym
【字符串哈希】【哈希表】Aizu
【思路】Aizu
【树状数组】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) C. DNA Evolution
【构造】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) B. High Load
【贪心】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) A. String Reconstruction
【模拟退火】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem F. Factory
【动态规划】【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem B. Dissertation
原文地址:https://www.cnblogs.com/webabcd/p/935450.html
最新文章
能源互联网从何而来?
为了迎合换机生态的火爆,国内智能手机不断涌现出价格杀手
该不该告诉客人他们同一个国家的向我买的其他客人
"中国制造2025"+"互联网+",引领制造业发展
关注先进制造带来的创新红利
美国如何布局战略,对应《中国制造2025》?
打破外国垄断,看“中国制造”向“中国智造”进发
中国制造正在遭遇危机么?
正在发生的景象--从大众消费到圈层经济
MySQL binlog三种模式
热门文章
数据库定时自动备份
通过binlog文件恢复mysql数据库
docker容器内安装vim
sql插入自动插入时间,更新自动更新时间
docker 安装redis web客户端
docker-compose 一键安装redis mysql rabbitmq elasticsearch kibana logstash
elasticsearch系列(四): bug收集
elasticsearch系列(三): SpringBoot整合
elasticsearch系列(二): 命令操作
【扫描线】Gym
Copyright © 2011-2022 走看看