Example #1
0
        /*2个数据库的事务,后面的根据前面的执行结果再决定要不要跟进(在同一个函数内,分布式)*/
        public static void test_db2_tran2()
        {
            DbContext db  = DbConfig.pc_user;
            DbContext db2 = DbConfig.pc_base;

            //1.建立主事务,并执于
            DbTranQueue queue = new DbTranQueue();

            //1.建立主事务,并执于
            db.tran().join(queue).execute((t) => {
                db.sql("insert into test(txt) values(?)", "cc").tran(t).execute();
                db.sql("insert into test(txt) values(?)", "dd").tran(t).execute();
                db.sql("insert into test(txt) values(?)", "ee").tran(t).execute();

                queue.result = 1;
            });


            //2.根据执行结果判断
            if ((int)queue.result == 1)
            {
                //3.执行第二个事务
                db2.tran().join(queue).execute((t) => {
                    db2.sql("insert into test(txt) values(?)", "gg").tran(t).execute();
                });//json(tran) 时,会自动调用 await(true);  当 await(true)时,需要之后的事务来触发或手动触发
            }

            //4.统一触发事务
            queue.complete();
        }
Example #2
0
        private static void tast_db2_tran(DbTranQueue queue)
        {
            //使用了 .await(true) 将不提交事务(交由上一层控制)
            //
            DbTran tran = DbConfig.pc_base.tran();

            tran.join(queue).execute((t) => {
                t.db().sql("insert into $.test(txt) values(?)", "gg").tran(t).execute();
            });
        }
Example #3
0
        private static void tast_db3_tran(DbTranQueue queue)
        {
            //使用了 .await(true) 将不提交事务(交由上一层控制)
            //
            DbTran tran = new DbTran(DbConfig.pc_live);

            tran.join(queue).execute((t) => {
                t.db().sql("insert into $.test(txt) values(?)", "xx").tran(t).execute();

                throw new Exception("xxxx");
            });
        }
Example #4
0
        //------------------

        private static void tast_db1_tran(DbTranQueue queue)
        {
            //使用了 .await(true) 将不提交事务(交由上一层控制)
            //
            DbTran tran = new DbTran(DbConfig.pc_user);

            tran.join(queue).execute((t) => {
                t.db().sql("insert into $.test(txt) values(?)", "cc").tran(t).execute();
                t.db().sql("insert into $.test(txt) values(?)", "dd").tran(t).execute();
                t.db().sql("insert into $.test(txt) values(?)", "ee").tran(t).execute();

                t.result = t.db().sql("select name from $.user_info where user_id=3").tran(t).getValue("");
            });
        }
Example #5
0
        //不同函数串一起,跨多个数据库(分布式)
        public static void tast_tran()
        {
            DbTranQueue queue = new DbTranQueue();//空事务,只提供最后的complete服务;

            try {
                //以下操作在同一个事务队列里执行(各事务独立)
                tast_db1_tran(queue);
                tast_db2_tran(queue);
                tast_db3_tran(queue);
            }
            finally {
                //确保事务有完成的执行
                queue.complete();
            }
        }
Example #6
0
        /*2个数据库的事务(在同一个函数内,分布式)*/
        public static void test_db2_tran()
        {
            DbContext db  = DbConfig.pc_user;
            DbContext db2 = DbConfig.pc_base;

            //1.建立主事务,并执于
            DbTranQueue queue = new DbTranQueue();

            db.tran().join(queue).execute((t) => {
                db.sql("insert into test(txt) values(?)", "cc").tran(t).execute();
                db.sql("insert into test(txt) values(?)", "dd").tran(t).execute();
                db.sql("insert into test(txt) values(?)", "ee").tran(t).execute();
            });

            //2.执行第二个事务
            db2.tran().join(queue).execute((t) => {
                db2.sql("insert into test(txt) values(?)", "gg").tran(t).execute();
            });

            queue.complete();
        }