.net中交易处理的解决方案解决方案
发布时间:2011-06-23 20:33:32 文章来源:www.iduyao.cn 采编人员:星星草
.net中交易处理的解决方案
在数据库软件中,其核心就是对数据库记录进行查询添加修改及删除操作,这是非常关键的也是必须非常谨慎的去完成。在现有的程序中经常会有因为某些错误而造成数据丢失甚至是系统崩溃,这就对我们的程序提出了一个数据操作的错误处理要求。
例如在进行银行转帐处理时,我们先从转出帐号减掉要转出的金额,然后再在接收的帐号上加上相应的金额。如果一切处理OK,我们的钱能顺利到达接收帐号。但要是系统在执行接收金额的步骤上出错了,那么不但自已钱变少了,该收到的人也没有收到,那笔钱就这样消失了.这是一个很危险的现像。解决办法就是要对数据操作的每一步都进行错误监控,一旦发现出错了,马上恢复数据至整个操作前的原始状态。.NET中提出了一个交易(Transaction)的观念,可以解决此类问题。
我现在来用交易实现上面的例子:
string sql1 = "... "; //在转出帐号上减去金额的处理SQL语句
string sql2 = "... "; //在接收帐号上加上金额的处理SQL语句
SqlConnection conn = new SqlConnection( "... "); //建立数据库连接
conn.Open(); //接开数据库连接
SqlTransaction tran = conn.BeginTransaction(); //开始进行交易处理
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.Transaction = tran;
try
{
comm.CommandText = sql1;
comm.ExecuteNonQuery();
comm.CommandText = sql2;
comm.ExecuteNonQuery();
tran.Commit(); //接受交易,完成操作
}catch
{
tran.Rollback(); //交易失败,恢复数据
}
finally
{
conn.Close(); //关闭数据库连接。
}
其实还有另外一种方法也可以实现以上目标。在transaction-sql中也提供了交易处理的方法(我想上种方法最终实现还是转换为此方法实现的).我们可以把以上处理建立为一个存储过程,然后再用SqlCommand进行调用,这个存储过程的主要的相关内容为(其中...处代表要进行数据库记录操作的多条SQL语句):
BEGIN TRANSACTION
...
IF (@@ERROR > 0) ROLLBACK TRANSACTION
ELSE COMMIT TRANSACTION
以上方法使用的是sql server的事务处理,针对同一数据服务器。如果需要针对不同的服务器,在.net2中我们可以使用System.Transaction.TransactionScope或者System.Enterprises命名空间中的类生成企业集解决方案,这两种方法都使用了Microsoft的msdtc分布式事务处理机制,使用非常方便,以下用TransactionScope作示例:
using(TransactionScope ts = new TransactionScope())
{
//执行语句1
//执行语句2
//事务提交
ts.complete();
}
http://bbs.csai.cn/bbs/view.asp?Id={DA39C759-2E86-4B42-827E-C64A7BEFC0C4
------解决方案--------------------
同时操作两个数据库服务器,如何保证数据的一致性、完整性呢?请大家思考!
------解决方案--------------------
谢谢. 参考!
------解决方案--------------------
谢谢
------解决方案--------------------
com+
------解决方案--------------------
谢谢
------解决方案--------------------
up learn
------解决方案--------------------
帮你顶一下
------解决方案--------------------
那叫事务处理!
什么交易?好好弄懂了再来臭显摆!
------解决方案--------------------
.net框架1.1中是不支持两个不同数据库之间的事务的(主要是限制oracle),但是在2.0中放开了限制。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
(VS2005)VB有关继承封装在DLL里窗体
公司里有一套自己的架构并把它封装在叫MFW的DLL里,再学习使用时发现了很多不明白的地方。例如:现...
-
如何让treeview点击结点不刷新页面?
如何让treeview点击结点不刷新页面?
------解决方案--------------------
帮你顶
------解决...
-
单薄的业务层
相信开发WEB信息的人都用到过三层架构
表示层--》业务层--》数据访问层
以前一直开发CS结构最近一年一直在开发...
-
类爆炸问题,对维护也是恶梦?
原意在ERP项目中有设计一个工序类用來描述工序:
public Process
{
public string ProcessNo
{
...
-
怎么实现随意变换网页字体?
想做个艺术签名的网站
字体也找了几个
就是在用户输入“名字”后
把“名字”转换成几个字体显示出来
...
-
关于政府部门网站数据库设计
今天上面安排让我做个政府有关部门的网站,我看了下不是很复杂。可到了设计数据库表时候碰到了些问题...
-
如何自动为录入的人员信息分配用户权限
我这里有两类人,一类是教师,一类是学生,要解决的问题是,在用管理员身份录入教师和学生信息时,...
-
Ext.Net 和ExtJS
现在在做一个项目,用到了EXT.NET 但是有个缺点就是EXT.NET里的时间选择器dateField不能选择时分秒,现在想到用EXTJ...
-
谁手里有现成的提示框样式啊,急用
谁手里有现成的提示框样式或者皮肤啊 还有弹出div层的好看一点的样式 给我个呗 我这急用呢 ...
-
求两个样式的例子...
一个是点击修改弹出修改表单表格 出现在列表上 要特别好看的那种 最好是悬浮的
一个 要弹出的确...