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
[源码下载]
查看全文
相关阅读:
Golang 学习入坑(三)Go语言变量及常量及运算符
Golang 学习入坑(二)Go语言结构及基本语法及基本类型
docker 理解和一些应用
golang学习入坑(一)Go介绍及环境搭建
VMware安装Centos7超详细程
2020-05-28 postgresql sequence
2020-05-18 缓存穿透、缓存击穿、缓存雪崩
2020-05-15 rocketmq-spring-starter支持多集群
2020-05-15 rocketmq-spring-starter结合disconf使用
2020-05-14 RSA加解密
原文地址:https://www.cnblogs.com/webabcd/p/935450.html
最新文章
dnsenum使用说明
reverseraider使用说明
scrapy
mysql——连接错误
js——8
vue——5
vue——3次笔记
vue——node.js安装
SpringSecurity5 (3) ——使用验证码登录
SpringSecurity5 (2) ——自定义登录页面
热门文章
SpringSecurity5 (1) ——初步认识
mysql查询使用索引
mysql使用like和as两个关键字创建相同表结构的区别
git命令行解决冲突方法
读取proerties文件
项目中使用git四种流程
Spring RestTemplate简介及使用
使用hibernate-jpamodelgen生成jpa的元模型
一些php.ini的配置参数(持续更新)
Golang 学习入坑(四)Go语言数组/切片/结构体/指针/Range(范围)/interface(接口)
Copyright © 2011-2022 走看看