步步为营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(); 
        } 
}
 







     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/345015 ,如需转载请自行联系原作者
相关文章
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
899 3
|
XML 开发框架 .NET
.NET 9 中 LINQ 新增功能实操
.NET 9 中 LINQ 新增功能实操
191 0
|
开发框架 .NET 开发工具
.NET 9 中 LINQ 新增的功能
.NET 9 中 LINQ 新增的功能
181 0
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
SQL 运维 监控
MSSQL性能调优实战技巧:索引优化、SQL查询优化与并发控制策略
在Microsoft SQL Server(MSSQL)的运维过程中,性能调优是确保数据库高效运行、满足业务需求的关键环节
|
SQL 数据库 开发者
SQL事务处理与并发控制:保障数据一致性的关键——深入探索ACID原则、锁定与乐观并发控制策略,以及高级事务管理技巧
【8月更文挑战第31天】在数据库管理和应用开发中,确保数据一致性至关重要。SQL事务处理和并发控制是实现这一目标的关键技术,它们保证了多用户同时访问和修改数据时数据库的一致性和准确性。事务处理遵循ACID原则(原子性、一致性、隔离性和持久性),并发控制则通过锁定和乐观并发控制等策略管理多用户访问,防止数据冲突。本文将深入探讨这些技术的原理与应用,帮助开发者更好地保护数据。
407 0
|
SQL 程序员 数据库
总结查看 .NET EF 生成的 SQL 的 3 种方式,亲测可用
总结查看 .NET EF 生成的 SQL 的 3 种方式,亲测可用
444 0
|
SQL
.Net Core EF 日志打印 SQL 语句
.Net Core EF 日志打印 SQL 语句
373 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
765 13
下一篇
开通oss服务