事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下:
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、雅安服务器托管、营销软件、网站建设、彭山网站维护、网站推广。
方法1:直接写入到sql 中
在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现
begin trans
declare @orderDetailsError int,@procuntError int
delete from [order details] where productid=42
select @orderDetailsError =@@error
delete from products where productid=42
select @procuntError=@@error
if(@orderDetailsError =0 and @procuntError=0)
COMMIT TRANS
else
ROLLBACK TRANS
优点:
所有事务逻辑包含在一个单独的调用中
拥有运行一个事务的最佳性能
独立于应用程序
限制:
事务上下文仅存在于数据库调用中
数据库代码与数据库系统有关
方法2 :使用ADO.NET 实现
使用ADO.NET 实现,使用这种方式的优点是可以在中间层来管理事务,当然你也可以选择在数据层来实现。
SqlConnection 和OleDbConnection 对象有一个 BeginTransaction 方法,它可以返回 SqlTransaction
或者OleDbTransaction 对象。而且这个对象有 Commit 和 Rollback 方法来管理事务
SqlConnection sqlConnection = new SqlConnection("workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False");
sqlConnection.Open();
SqlTransaction myTrans = sqlConnection.BeginTransaction();
SqlCommand sqlInsertCommand = new SqlCommand();
sqlInsertCommand.Connection = sqlConnection
sqlInsertCommand.Transaction=myTrans;
try{
sqlInsertCommand.CommandText="insert into tbTree(Context,ParentID) values('北京',1)";
sqlInsertCommand.ExecuteNonQuery();
sqlInsertCommand.CommandText="insert into tbTree(Context,ParentID) values('上海',1)";
sqlInsertCommand.ExecuteNonQuery();
myTrans.Commit();
}catch(Exception ex)
{
myTrans.Rollback();
}
finally
{
sqlConnection.Close();
}
优点:
简单性
和数据据事务差不多的快
独立于数据库,不同数据库的专有代码被隐藏了
缺点:
事务不能跨越多个数据库连接
事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接
ADO.NET分布事务也可以跨越多个数据库,但是其中一个SQL SERVER 数据库的话,通过用SQL SERVER连接服务器连接到别的数据库,但是如果是在DB2和Orcal之间就不可以。
以上两种事务是经常用到的事务处理方法。
方法3 COM+事务(分布式事务)
.NET Framework 依靠 MTS/COM+ 服务来支持自动事务。COM+ 使用 Microsoft Distributed Transaction Coordinator (DTC) 作为事务管理器和事务协调器在分布式环境中运行事务。
这样可使 .NET 应用程序运行跨多个资源结合不同操作(例如,将定单插入 SQL Server 数据库、将消息写入 Microsoft 消息队列 (MSMQ) 队列、以及从 Oracle 数据库检索数据)
的事务。
COM+事务处理的类必须继承System.EnterpriseServices.ServicedComponent,其实web service就是继承System.EnterpriseServices.ServicedComponent,所以web service也支持
COM+事务。
定义一个COM+事务处理的类
[Transaction(TransactionOption.Required)]
public class DataAccess:System.EnterpriseServices.ServicedComponent
{
}
TransactionOption枚举类型支持5个COM+值(Disabled,NotSupported,Required,RequiresNew,Supported)
Disabled 忽略当前上下文中的任何事务。
NotSupported 使用非受控事务在上下文中创建组件。
Required 如果事务存在则共享事务,并且如有必要则创建新事务。
RequiresNew 使用新事务创建组件,而与当前上下文的状态无关。
Supported 如果事务存在,则共享该事务。
一般来说COM+中的组件需要Required 或Supported。当组件用于记录或查帐时RequiresNew 很有用,因为组件应该与活动中其他事务处理的提交或回滚隔离开来。
派生类可以重载基类的任意属性。如DataAccess选用Required,派生类仍然可以重载并指定RequiresNew或其他值。
COM+事务有手动处理和自动处理,自动处理就是在所需要自动处理的方法前加上[AutoComplete],根据方法的正常或抛出异常决定提交或回滚。
手动处理就是调用ContextUtil类中EnableCommit,SetComplete,SetAbort方法。
public string testTransaction()
{
try
{
ContextUtil.EnableCommit();
InsertARecord1();
InsertARecord2();
ContextUtil.SetComplete();
return "succeed!";
}
catch(Exception ex)
{
ContextUtil.SetAbort();
return "failed!";
}
}
public void InsertARecord1()
{
string strconn="workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand command=new SqlCommand("insert into tbTree(Context,ParentID) values('北京',1)",conn);
command.ExecuteNonQuery();
conn.Close();
}
public void InsertARecord2()
{
string strconn="workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand command=new SqlCommand("insert into tbTree(Context,ParentID) values('上海',1)",conn);
command.ExecuteNonQuery();
conn.Close();
}
在需要事务跨 MSMQ 和其他可识别事务的资源(例如,SQL Server 数据库)运行的系统中,只能使用 DTC 或 COM+ 事务,除此之外没有其他选择。DTC 协调参与分布式事务的所有资源管理器, 也管理与事务相关的操作。
这种做法的缺点是,由于存在 DTC 和 COM 互操作性开销,导致性能降低。
COM+事务处理的类必须强命名。
基于ASP的收发文管理系统的设计与实现
传统的手工办公方式已经无法满足现代办公的需求,收发文管理系统作为提高工作效率、规范办公制度,增强办公的透明性,实现信息、文档资源的统一管理,方便领导决策,逐步实现无纸化办公的重要工具,越来越受到人们的重视。
我们选择B/S三层结构,后台数据库采用SQL Server,WEB服务器运行微软的IIS,以ASP(Active Server Pages)作为开发工具,客户端用IE浏览器。
B/S模式体系结构概述
B/S模式是指在TCP/IP的支持下,以HTTP为传输协议,客户端通过Browser访问Web服务器以及与之相连的后台数据库的技术及体系结构。它由浏览器、Web服务器、应用服务器和数据库服务器组成(图1)。B/S模式突破了传统的文件共享及C/S模式的限制,实现了更大程度的信息共享,任何用户只要通过浏览器即可访问数据库,从而克服了时间和空间的限制。
B/S模式的工作原理是:客户端的浏览器通过URL访问Web服务器,Web服务器请求数据库服务器,并将获得的结果以HTML形式返回客户端浏览器。
功能模块
基于收发文档一体化的实现机制,可将系统分为如下几个子模块。
(1) 系统管理
作为系统管理员,他可以对整个系统进行维护,包括人员维护、科室维护、模块维护、人员职能维护、人员职务维护、用户权限维护、用户口令维护、系统配置项的维护另外还可以对全局公告栏的类别进行维护。
(2) 发文管理
发文管理是一个单位对具有约束能力文件形成过程的一种管理。如执行发文拟稿、核稿、会审、会签、签发、文书打印、批阅流转、归档等管理工作。文件送阅和批复完全在计算机网络上完成,所有的工作流程可以由用户自定义,所有的送交批阅痕迹,修改痕迹,操作时间和操作人都被详细保留。同时,对发文系统还提供全文检索、条件检索等功能。
它主要的用于像公司规章制度的形成、档案室制度的形成、财务室制度的形成、干部任免文件的形成、职工奖罚规定的形成、库存管理制度的形成、安全生产制度的形成、及其它对所有人都具有约束性的文件的形成过程。
图(2)是整个发文的流程图,用户可以根据需要选择其中的某些步骤来完成发文的管理。
图2
(3) 收文管理
收文管理主要对外来公文进行登记和处理。主要用于登记像税务局发来的文件、公安部门发来的文件、总公司发来的文件行业主管部门来文的处理过程、协作单位发来的文件处理过程、兄弟单位发来的文件处理过程、及其它外来的公文文件的处理过程。
主要的处理过程有:收文登记、主任拟办、领导批示、处室承办、传阅、送交归档等功能。在领导批办界面可以将文件送往更高一级的领导进行审批,到底由哪些处室承办,送交给哪些处室由最高领导决定。管理人员可以通过“收文查询操作”对收文处理全过程进行跟踪与监督。
对办理完毕的收文系统还提供全文检索、条件检索、统计等功能。
图(3)是整个收文的流程图,用户可以根据需要选择其中的某些步骤来完成收文的管理。
图3
(4) 档案管理
对本部门或其它部门发送的文件进行接收,然后将文件进行组卷(将文件组入某一案卷中)、移卷(将某案卷中的文件移动至其它案卷)、移出(将某案卷中的文件移出案卷)。对于未立卷的收发文文件,可以组卷。对于档案可以进行封卷,拆卷,销毁案卷,对封卷的案卷或未封卷的案卷都可以进行借阅和查询管理,您可以在此进行档案的借阅、归还。还可以对档案的阅读权限进行有效地分配管理。
相关的实现技术
1、典型数据表的设计
在收发文管理系统中,任意收文或发文文件都对应一个默认流程(事先已经定义好了),文件按照流程中指定的步骤逐次向下流转。以某收文流程为例有:收文登记—〉主任拟办—〉领导批办—〉处室承办—〉送交归档。为了对文件进行实时跟踪,及时监督它的流向进程或者考察在某些阶段处理的详细情况,这就要求我们提供两个重要的数据表,在本系统中为数据表gw_mrlc和数据表gw_cllc。
其中,gw_mrlc(wdlx,lcmc,ry,xh,clm,clr)记录了系统中用到的各默认流程的信息。Wdlx指文档类型,收文或者发文;lcmc指流程名称;ry指定义该默认流程的人员;xh对应默认流程中各步骤的顺序号,它有大小之分,小的则表示步骤在前,系统将先执行;clm对应默认流程中各步骤的名称;clr对应默认流程中各步骤的处理人员。
Gw_mrlc仅是记录了各流程的信息,还需要gw_cllc(lxh,lcmc,xh,clr,jbrq,clrq,clyj,zt,wjm)来跟踪文件在流程中的执行状况。对于任意收发文文件在系统中都会有各自唯一的流程与之一一对应,lxh则记录了该流程的序列号;lcmc,xh,clr同上所定义;jbrq,clrq,clyj,zt,wjm都是针对该流程中顺序号为xh的各个处理步骤而言,jbrq指上一个步骤处理完毕提交过来时的日期;clrq指当前步骤处理完毕时的日期;clyj指当前步骤的处理意见;zt指当前步骤的处理状态,已经处理还是尚未处理,以方便文件的实时跟踪;wjm则记录了文件的正文内容和在流转过程中文件的修改痕迹,具体的可以通过文件上传功能来实现。
2、使用Session进行登录验证
ASP代码使用表单实现交互,而相应的内容会反映在浏览器的地址栏中,如果不采用适当的安全措施,只要记下这些内容,就可以绕过验证直接进入某一页面。例如在浏览器中敲入“...xx.asp?flag=1”,即可不经过表单页面直接进入满足“flag=1”条件的页面。
为防止未经注册的用户绕过注册界面直接进入应用系统,我们采用Session对象进行注册验证。例如,我们制作了下面的注册页面。
%’读取用户登录的信息
Luser=ltrim(Request("User"))
Lpass=Request("Pass")
’检验帐号和密码是否正确
if Luser=rs(“userid”) and Lpass= rs(“password”) then
Session("sysuser")=Luser ’使用Session对象进行用户登录验证
…
else
response.write “您的输入不正确!”
response.end
end if
%
在应用系统的其他WEB页,首先要进行Session对象的验证。如果你未通过用户登录界面,那么Session("sysuser")就为空值,你将无法使用系统提供的任何功能,除非你是合法用户才可,这样就在一定程度上保证了系统的安全性。其验证代码如下:
%
if session("sysuser ")="" then
response.write("对不起,你还没有a href='../login.asp' target='_top'登录/a。")
else
…
end if
%
3、对ASP页面进行加密
为有效的防止ASP源代码泄露,可以对ASP页面进行加密。我们曾采用两种方法对ASP页面进行加密。一是使用组件技术将编程逻辑封装入DLL之中;二是使用微软的ScriptEncoder对ASP页面进行加密。使用组件技术存在的主要问题是每段代码均需组件化,操作比较繁琐,工作量较大,而使用Encoder对ASP页进行加密,操作简单,收效良好。
ScriptEncoder的运行程序是SCRENC.EXE,使用方法是:
SCRENC [/s][/f][/xl][/ldefLanguage][/edefExtention]inputfile outputfile
其中:/s是屏蔽屏幕输出;/f指定输出文件是否覆盖同名输入文件;/xl指是否在.asp文件的顶部添加@Language指令;/ldefLanguage指定缺省的脚本语言;/edefExtention指定待加密文件的扩展名。
4、存储过程的使用
使用存储过程不仅可以提高查询速度,而且可以保证事务的完整性。在该系统中,每个文件对应唯一的流水号,当有新的文件要入库时流水号就会自动加一。由于所有的用户都在网上,那么两个文件同时入库的情况就有可能发生,为了保证流水号的唯一性,就要求“取流水号”和“流水号加一”作为一个事务来完成。ASP调用存储过程比调用SQL语句要复杂一些,必须用ADO组件中的命令对象,步骤如下:
创建一个ADO命令对象,把Commandtext属性为存储过程名,Commandtype属性为4,表示该命令是调用存储过程为命令对象创建参数。
用“命令对象.CreateParameter(参数名称,类型,方向,长度)”命令创建对应与存储过程的输人、输出参数。
用“命令对象.Parameters(参数名称).Value=参数值”命令给输人参数赋值。
用“命令对象.Parameters.Append参数名称”命令将各个参数加入到命令对象的参数集合中。
“命令对象.Execute”执行存储过程。
“变量名=命令对象.Parameters(输出参数名称).Value”得到输出参数值。
结束语
基于B/S模式开发的收发文管理系统的实现,无疑会使传统的以手工为主的办公方式和办公手段,向科学化、规范化、高效化和信息化转变。可以预计,随着办公信息量的增加和信息化程度的提高,电子办公将是未来办公的发展方向。
个人财务信息管理系统,你说什么具体的要求,如语言
哪些功能要明确什么样的数据结构
东西,我们可以帮你
分享标题:vb.net事务管理的简单介绍
URL地址:https://www.cdcxhl.com/article4/dopheoe.html
成都网站建设公司_创新互联,为您提供营销型网站建设、网站设计公司、自适应网站、ChatGPT、外贸网站建设、标签优化
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联