赛迪网 >> 技术应用子站 >> ASP
net中交易处理的解决方案
作者: 来源:cfan 发布时间:2006.07.27
【Java专区】 【网络安全】 【网管专区】 【linux专区】 【数据库专区】 【进入论坛】 【IT博客】 
【Eclipse】  【PHP】  【DB2】  【Ajax】  【Struts】  【Spring】 

在数据库软件中,其核心就是对数据库记录进行查询添加修改及删除操作,这是非常关键的也是必须非常谨慎的去完成。在现有的程序中经常会有因为某些错误而造成数据丢失甚至是系统崩溃,这就对我们的程序提出了一个数据操作的错误处理要求。



例如在进行银行转帐处理时,我们先从转出帐号减掉要转出的金额,然后再在接收的帐号上加上相应的金额。如果一切处理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


带给你最新,最快,最权威的数据库技术
评论】 【推荐】 【 】 【打印】 【关闭
*姓  名: 更多资料 了解方案 认识厂商
*单位名称:
*联系电话:
*电子邮件:
    
◆ 相关文章
· 亿众国际点对点文件传输程序 2004-04-26
· 连接池的管理 2003-01-15
· 如何在调用线程的时候传递参数 2004-02-28
· XML 中的常见问题 2004-04-18
· 如何获得 Windows 操作系统的版本 2003-12-04