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

时间: 2024-11-02 03:12:38

net中交易处理的解决方案的相关文章

电子商务中的网上支付解决方案

电子商务中的网上支付解决方案 一.引言 随着中小企业对电子商务应用程度的深入,越来越多的企业希望在自己的网站上能与顾客实现在线交易,而网上支付问题则是在线交易中的关键问题.对于中小企业而言,可以通过哪些方法低成本.高效率地解决网上支付问题呢?本文提出了网上支付问题的两种主要解决方案:网上银行模式和第三方支付平台模式,同时分析了网上支付中存在的主要问题及应对策略. 二.网上支付概述 网上支付是指以金融电子化网络为基础,以商用电子化工具和各类交易卡为媒介,采用现代计算机技术和和通信技术作为手段,通过

简述SharePoint 2010中的沙盒解决方案

当程序员使用Visual Studio 2010为SharePoint 2010创建应用程序时,可以创建两种类型的解决方案,服务器场解决方案和沙盒解决方案.比如,打开Visual Studio 2010,新建一个空白SharePoint项目,你看到的第一个界面就是如下这个对话框. 服务器场解决方案(或简称为场解决方案)和SharePoint 2007一样,是一种被完全信任的解决方案.场解决方案可以包含能放到解决方案包里面的所有SharePoint组件和元素,比如应用程序页.可视化Web部件等等.

我在哪里可以配置windows azure中可用的缓存解决方案?

问题描述 我在哪里可以配置windows azure中可用的缓存解决方案? 我在哪里可以配置windows azure中可用的缓存解决方案,对于老的azure管理控制台, 解决方案 Hi 你指的是Microsoft的Azure 还是中国版的Azure? Best RegardsJambor 解决方案二: Hi 在中国版的Azure中,我们暂时可以通过使用Azure caching来作为我们的缓存解决方案,这篇文章:http://www.windowsazure.cn/zh-cn/develop/

gc-关于Android中完全退出的解决方案

问题描述 关于Android中完全退出的解决方案 一般的做法是像这样 http://www.oschina.net/question/157182_59222 用一个链表去记录Activity.在退出的时候一一finish掉. 可是这样的话,每一个加进去的Acitivity在GC的时候都有可达的GC root,就是那个链表,导致Acitivity无法释放. 当Acitivity里的资源占用内存较大,存在OOM的问题. 有没有两全的解决方案呢? 解决方案 如果有图片等占用资源大的,就应该考虑用完就

iOS中关于模块化开发解决方案(纯干货)_IOS

关于iOS模块化开发解决方案网上也有一些介绍,但真正落实在在具体的实例却很少看到,计划编写系统文章来介绍关于我对模块化解决方案的理解,里面会有包含到一些关于解耦.路由.封装.私有Pod管理等内容:并编写的一个实例项目放在git进行开源[jiaModuleDemo],里面现在已经放着一些封装的功能模块:会不断的进行更新,假如你感兴趣可以Star一下,项目也不断的更新完善优化:如果你有更好的方案或者说好的建议可以lssues,我会在短时间进行更新并修改相应的问题: 一:项目中存在的问题 1:当公司里

微财富公布“中汇盈”事件解决方案用户可全额拿回本金收益

12月31日,在微财富与深圳市中汇盈金融服务有限公司(下称中汇盈)合作的最近一期资产到期日(2015年1月1日)之前,微财富对外发布了有关中汇盈事件的解决方案.公告称,针对目前中汇事件的相关进展情况,微财富公司启动了特殊风险处置方案,用户可将中汇盈项目债权转让至微财富,由微财富合作的第三方资产管理公司负责债权追偿.这也意味着在微财富平台上购买汇盈宝和PP猫外贸贷系列理财产品的用户,在完成相应手续后,可以如期拿回投资本金和约定收益.12月13日,中汇盈公司在官方网站上自爆提现困难,引发微财富用户对

SQL Server数据库中交易日志的维护

交易日志(Transaction logs)是数据库结构中非常重要但又经常被忽略的部分.由于它并不像数据库中的schema那样活跃,因此很少有人关注交易日志. 交易日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中.对于任何每一个交易过程,交易日志都有非常全面的记录,根据这些记录可以将数据文件恢复成交易前的状态.从交易动作开始,交易日志就处于记录状态,交易过程中对数据库的任何操作都在记录范围,直到用户点击提交或后退后才结束记录.每个数据库都拥有至少一个

asp.net中的ResolveUrl 完美解决方案

根据我个人使用ASP.NET的经验,和通过在网上搜索.我发现,Page的ResolveUrl方法 给我们带来了一些比较严重的问题. 最常见的问题是在页面或控件以外的范围不 能使用它. 其他的问题都是bug.如它不能正确处理一些你给的URL.例如,尝试 Page.ResolveUrl("~/test.aspx?param=http://www.test.com").结果与你输入字符串相 同,没做任何变动.使用Reflector查看asp.net代码,我发现将相对URL转换为绝对URL机

windows7中出现联机检查解决方案并关闭程序的建议做法

win7中出现了联机检查解决方案并关闭程序,重装软件是没有用的,所以平时就需要大家把下载的软件都放到C盘一外的其他盘中,然后用自带的杀毒软件一键重转C盘就可以了,驱动的话就可以安装驱动精灵或者驱动人生.         注:更多请关注电脑教程 栏目,三联电脑办公群:189034526欢迎你的加入