`
lovnet
  • 浏览: 6880769 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

用Microsoft.net实现数据库事务(三)

阅读更多

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

企业级服务

企业级服务是唯一一种天生支持分布式两阶段提交的事务机制。当你开始编码之前,重要的是要了解企业级服务的工作机制,如果你用过VB编程,并且熟悉COM+编程,你就会了解企业级服务所提供的功能。用VB去创建COM+程序和用CLR创建企业级服务的一个不同之处是你不必再局限于单线程套间(STA),深入介绍企业级服务之前,你最好去搞清楚单线程套间(STA)和多线程套间(MTA)的区别。使用企业级服务,你的.net装配会驻留在COM+应用程序中来获得诸如DTC和对象池的服务,本文主要集中讨论COM+事务服务,但也会提一下其他服务。

为了实现企业级服务组件,要在你的class文件中用using System.EnterpriseService来引入System.EnterpriseService命名空间,每个类都需要继承ServicedComponet,这些类需要是公共的,并且需要提供一个公共的缺省的构造器,一单你扩展了ServicedComponet类,开发企业级服务仅需要配置一下属性。你也可以通过CLR来获得COM+元数据,这样所有的COM+应用程序的属性就可以在程序中来设置,利用Visual Studio.NET这些属性可以定义在一个叫AssemblyInfo.cs的文件中,也可以定义在.cs文件中,你必须的装配属性是:

[assembly: ApplicationName("YourApplicationNameHere")]

[assembly: ApplicationActivation(ActivationOption.Library)]

[assembly: AssemblyKeyFile("..\\..\\keyfilename.snk")]

l ApplicationName 设置了显示在COM+目录中程序的名字。

l ApplicationActivation 定义了是做为库应用还是服务应用激发的。在开发中经常设为服务应用以可以监视每个组件的活动,而在测试和成为产品后要设为库应用来取得最好的性能。

l AssemblyKeyFile 给编译器提供了一个密钥文件,用来给装配一个强名字,你需要提供一个相对于装配路径的相对路径。典型地是\bin\release\myassembly.dll

运行在CLR中的企业级服务程序都需要一个强名字,编译你的装配之前,你需要创建一个密钥文件。创建的命令行语句是:sn –k keyfilename,这样在当前的目录中会产生一个keyfilename.snk文件,这个文件必须在AssemblyKeyFile属性中引用。

现在我们可以进行属性的设置了,我们首先增加类属性,为了创建一个事务型组件,要在类定义之前加属性[Transaction(TransactionOption.Required)].类里面的每个方法就会运行在一个事务中,控制每个方法的提交或者回滚的最简单的方法是在方法之前增加属性[AutoComplete(true)],这样如果方法执行时没有异常就缺省提交,如果有异常这个方法就会回滚。

前提

l 需要强名字

优势

l 执行分布式事务

l 获得COM+服务,诸如对象构建和对象池

限制

l 牺牲了一些性能

l COM+ 1.0要求每个事务的隔离级别都要设置为Serializable

例子:

AssemblyInfo.cs file

[assembly: ApplicationName("MyEnterpriseApplication")]

[assembly: ApplicationActivation(ActivationOption.Server)]

[assembly: AssemblyKeyFile("..\\..\\MyEntApp.snk")]

Component.cs file

using System;

using System.EnterpriseServices;

using System.Reflection;

using System.Runtime.InteropServices;

using System.Data;

using System.Data.SqlClient;

using System.Text;

namespace PetShop.ComponentsTx

{

// COM+ 1.5 (Win XP) supports setting transaction isolation level

// To use with Windows 2000, remove isolation attribute

[ Transaction(TransactionOption.Required, Isolation =

TransactionIsolationLevel.ReadCommitted) ]

public class OrderTx : ServicedComponent

{

//Must supply default constructor

public OrderTx()

{

}

//Set autocomplete to allow auto commit or rollback

[ AutoComplete(true) ]

public int purchaseitem(int customerId, int itemId, int itemQty)

{

SqlConnection con = null;

int orderId = 0;

try

{

con = new SqlConnection("Data Source=localhost; user

Id=sa;password=;Initial Catalog=trans_db;");

con.Open();

String updatesqltext = "UPDATE inventory SET qtyinstock = qtyinstock - "

+ itemQty.ToString() + " WHERE inventory.productid =

" + itemId.ToString();

SqlCommand cmd = new SqlCommand(updatesqltext, con);

cmd.ExecuteNonQuery();

String insertsqltext = "INSERT INTO orders VALUES (" +

customerId.ToString() + ",

" + itemId.ToString() + "," +

itemQty.ToString() + " ,

getdate() ); SELECT @@IDENTITY";

cmd.CommandText = insertsqltext;

orderId = Convert.ToInt32(cmd.ExecuteScalar());

cmd.Dispose();

}

catch (Exception ex)

{

orderId = 0;

throw (ex);

}

finally

{

con.Close();

}

return orderId;

}

}

测试结果

我们把不同事务版本的宠物店放到实验室里测试他们的性能。

一个负载生成工具用来记录用户与程序的交互,用户访问宠物店处理的步骤是:

1. 到登录页面

2. 登录

3. 增加四种随机的产品到购物车中

4. 从购物车中去掉最后一个产品

5. 购买购物车中的产品

测试脚本在所有时间利用同一个帐户,产品被增加到购物车是用了直接的URL方法,比如:

http://localhost/petshop/Cart.aspx?action=purchaseItem&itemId=EST-123

测试随机生成语句(范围从EST-1 EST-50000)提交到服务器上。

负载生成工具模拟不同的用户登录到系统里,每个用户假设都没有机会去额外增加系统的负载。

测试配置

中间层:2 x 550 MHz Intel Pentium III

500 MB Ram

4GB SCSI hard drive

Windows 2000 Advanced Server (SP2)

.NET Framework SDK RTM

数据层:4 x 550 MHz Intel Pentium III

3 GB Ram

8 GB SCSI hard drive (OS)

Disk array (Database files)

Windows 2000 Advanced Server (SP2)

数据层(DTC: 4 x 550 MHz Intel Pentium III

3 GB Ram

8 GB SCSI hard drive (OS)

Disk array (Database files)

Windows 2000 Advanced Server (SP2)

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 356.25pt; HEIGHT: 456pt" alt="" type="#_x0000_t75"><img o:href="file:///E:\download\net\Implementing%20Database%20Transactions%20with%20Microsoft%20_NET.files\rightframe.files\psent.files\psent8.gif" src="/Develop/ArticleImages/25/25155/CSDN_Dev_Image_2004-3-31003080.gif"><font size="3"></font></shape>

8:事务性能测试结果

概要和结论

本文讨论了一些.Net平台对于企业级开发技术的支持,诸如分布式事务,并结合宠物店系统作了一些性能上的补充。

要知道.Net有几种事务机制来很好地为企业所用,所有这些并没有在性能上和可伸缩性上有所降低。

分享到:
评论

相关推荐

    ASP.NET 4.5 数据库入门经典 第3版

    《ASP.NET 4.5 数据库入门经典》第三版是一本专为初学者设计的教程,旨在帮助读者快速掌握ASP.NET 4.5框架下的数据库编程技术。这本书以通俗易懂的方式介绍了诸多关键概念和实践技巧,使得读者即使在没有深入接触过...

    ASP.NET与数据库程序设计

    在ASP.NET中,与数据库交互通常通过ADO.NET(ActiveX Data Objects .NET)来实现,这是.NET Framework的一部分,提供了对各种数据库系统的访问能力。ADO.NET模型由几个主要组件组成:DataSets、DataTables、Data...

    ASP.NET通用数据库访问组件

    6. 事务处理:支持数据库事务,确保数据的一致性和完整性。 7. 错误处理和异常捕获:提供统一的错误处理机制,方便调试和记录日志。 "External"可能是一个包含外部依赖项或其他辅助工具的文件夹,这些工具可能用于...

    ASP.NET2.0数据库高级编程

    4. **Entity Framework**:虽然ASP.NET 2.0本身不包含Entity Framework,但书中可能提到了这个后来出现的对象关系映射(ORM)工具,它是微软推荐的数据访问框架,简化了数据库操作。 5. **数据绑定和控件**:书中...

    基于VB.NET的数据库应用程序设计

    【标题】"基于VB.NET的数据库应用程序设计"深入探讨了如何使用Microsoft的VB.NET编程语言来构建与数据库交互的应用程序。在VB.NET中,数据库应用是通过ADO.NET框架实现的,这是一个强大的工具集,用于访问各种关系型...

    vb.net连接数据库全集

    10. **ODBC连接**: 对于非Microsoft数据库,可以使用`OdbcConnection`类。连接字符串格式会根据所使用的ODBC驱动程序有所不同。 11. **LINQ to SQL** 和 **Entity Framework**: 这是两种高级的数据访问技术,提供更...

    ADO.NET访问数据库.rar_mysteriousi9b_基于ADO.net的数据库访问_数据库_访问数据库

    这个压缩包文件很可能是对ADO.NET数据库访问技术的详细讲解,涵盖数据库设计规范和三层架构下的数据访问层实现。通过学习,开发者可以深入理解如何使用ADO.NET与数据库进行高效交互,并掌握数据库设计的最佳实践,...

    Visual Basic.NET 与数据库开发

    在IT行业中,数据库开发是至关重要的领域,而Visual Basic.NET(简称VB.NET)作为微软.NET框架的一部分,提供了强大的工具和库来实现这一目标。本文将深入探讨VB.NET与数据库开发的相关知识点,帮助开发者掌握如何...

    vb.net 操作Access数据库

    在VB.NET编程环境中,操作Access数据库是一项常见的任务,这主要涉及到ADO.NET库的使用,它提供了与各种数据库交互的能力。本篇文章将详细讲解如何利用VB.NET进行Access数据库的增删改查操作。 首先,我们需要引入...

    c# asp.net实现sql server数据库备份

    本教程将详细介绍如何使用C#和ASP.NET来实现SQL Server数据库的备份。 首先,我们需要理解SQL Server的备份机制。SQL Server提供了多种备份类型,包括完整备份、差异备份、日志备份等。完整备份会保存整个数据库,...

    asp.net 全能数据库

    综上所述,【asp.net 全能数据库】是一个全面的数据库解决方案,它结合了数据库连接、SQL执行、ORM、事务管理等多种功能,旨在为ASP.NET开发者提供强大且易用的数据库操作工具。开源的性质使得开发者可以根据需要...

    VB.NET 针对数据库操作的程序

    你可以使用Transaction对象来管理数据库事务,确保一组操作要么全部成功,要么全部回滚。例如: ```vb.net Using transaction As SqlTransaction = connection.BeginTransaction() Try ' 执行一系列数据库操作 ...

    VB.NET与数据库开发

    VB.NET结合了微软的ADO.NET(ActiveX Data Objects .NET)库,使得数据库操作变得简单且高效。下面我们将深入探讨VB.NET与数据库开发的相关知识点。 1. ADO.NET概述:ADO.NET是.NET Framework的核心组件,用于处理...

    基于ASP.NET和数据库的网页设计

    综上所述,"基于ASP.NET和数据库的网页设计"项目涵盖了从后端到前端的完整Web开发流程,适合初学者学习和实践,通过这个项目,不仅可以掌握ASP.NET和SQL Server的基本使用,还能深入了解HTML、CSS和JavaScript在网页...

    ASP.NET与数据库程序设计教程

    ASP.NET 是微软公司开发的一种用于构建动态网站、Web 应用和Web 服务的技术框架,它基于.NET Framework,提供了一套高效、安全且易于维护的Web 开发平台。本教程将深入探讨如何在ASP.NET环境下进行数据库程序设计,...

    ASP.NET 连接数据库Microsoft .dll文件

    综上所述,ASP.NET连接数据库Microsoft .dll文件涉及到的关键知识点包括ADO.NET架构、Oracle数据提供者、数据库连接字符串配置、数据库操作类的使用以及最佳实践。在实际开发中,正确理解和运用这些知识点将有助于...

    《VB.NET+数据库入门经典(第2版)》.rar

    VB.NET是微软.NET框架下的一个面向对象的编程语言,它提供了丰富的功能和易用性,使得开发者能够轻松创建桌面、Web和移动应用。而数据库则是存储和管理数据的核心工具,对于任何应用程序来说,理解和掌握如何使用...

    基于.NET的数据库访问技术的优化研究

    5. **异步操作**:利用.NET框架提供的异步编程模型,如async/await关键字,可以实现数据库访问的非阻塞,提高应用程序的响应速度。 6. **错误处理和事务管理**:有效的错误处理和事务管理能确保数据的一致性和完整...

    ASP.NET 2.0 数据库项目案例导航

    通过这个案例导航,开发者可以深入理解ASP.NET 2.0与数据库的结合使用,学习如何设计和实现高效的Web应用程序。每个章节可能都包含了详细的步骤、代码示例以及解释,帮助开发者逐步掌握数据库项目的开发技能。在实践...

Global site tag (gtag.js) - Google Analytics