C#简单事务处理

来源:互联网 发布:php云主机配置 编辑:程序博客网 时间:2024/05/22 06:56

       我想从最简单的事务处理讲起。至于有关事务处理的理论,请上网查看或者数据库的教科书就有了。其实我也记不住那些东西,可是我觉得事务就是在同时对多个表格操作的时候比较有用。比如常用的例子,就是转账存钱。我想将工商银行里面的200元转到招商银行的卡中。我这个过程中有两个要处理的,一就是工行卡扣除200元,然后招商银行账号里增加200元。假如在处理的过程中,停电或者在增加招行账户数据出错的时候,如果没有事务处理,那我的工商银行就少了200元,但是我的招行都没有转账成功。所以,在事务处理里,将扣除工行的200元和增加招行200元当做一个事务,事务开始运行,完成之后再提交,假如有出错的情况,进行回滚就好了。

      在上面中,我讲到了事务,事务运行,事务提交和事务回滚。具体的理论我在这里就不说了,我也记不住。接下来就是代码实现阶段。

using System;using System.Collections.Generic;using System.Text;using System.Data.OleDb;namespace CSharpTransaction{    class Program    {        private static string strConn = "provider=microsoft.jet.oledb.4.0;data source=D:\\bank.mdb";        private static OleDbConnection conn = new OleDbConnection(strConn);        private static OleDbTransaction trans;        static void Main(string[] args)        {            conn.Open();                        try            {                decimal icbcMoney = 0m;                GetICBC(ref icbcMoney);                decimal cmbMoney = 0m;                GetCMB(ref cmbMoney);                icbcMoney = icbcMoney - 200;                cmbMoney = cmbMoney + 200;                trans = conn.BeginTransaction();                AddCMB(cmbMoney,trans);                SubICBC(icbcMoney,trans);                trans.Commit();                Console.WriteLine("事务提交成功!");            }            catch (Exception ex)            {                if (trans != null)                {                    trans.Rollback();                }                Console.WriteLine(ex.Message);                Console.Read();            }        }        private static void AddCMB(decimal money,OleDbTransaction trans)        {            string strSQL = "update [cmb] set [money] = " + money + " where myid = '05110220132'";            OleDbCommand cmd = new OleDbCommand(strSQL,conn);            cmd.Transaction = trans;            cmd.ExecuteNonQuery();        }        private static void SubICBC(decimal money,OleDbTransaction trans)        {            string strSQL = "update [icbc] set [money] = " + money + " where myid = '0511200133'";            OleDbCommand cmd = new OleDbCommand(strSQL, conn);            cmd.Transaction = trans;            cmd.ExecuteNonQuery();        }        private static void GetCMB(ref decimal money)        {            string strSQL = "select money from [cmb]";            OleDbCommand cmd = new OleDbCommand(strSQL, conn);            money = Decimal.Parse(cmd.ExecuteScalar().ToString());        }        private static void GetICBC(ref decimal money)        {            string strSQL = "select money from [icbc]";            OleDbCommand cmd = new OleDbCommand(strSQL, conn);            object obj = cmd.ExecuteScalar();            money = (decimal)obj;        }    }}

 

这是我自己写的例子,已经运行通过。

原创粉丝点击