请教一下如何用线程从一个表中取出插入到另一张表中的时候,做事务处理,也就是说如果取出的数据全部插入另一张表了,那就插入成功,否则就事务回滚....数据库线程

解决方案 »

  1.   

    除非是自动提交,否则本来就是按事务处理的啊,只需要在全部插入另一张表后执行commit就行了啊,如果没有全部插入就执行rollback
      

  2.   

    插入的时候,加exception,如果出现异常就回滚rollback无论在plsql里,还是java等其他语言代码里,都一样的,捕获异常,提交或者回滚。有什么问题?
      

  3.   


    using System;
    using System.Data.OracleClient;
    // 事务回滚操作实例 [Oracle数据库表--CREATE TABLE userinfo(username varchar(20));]
    public class Transcation
    {
    public static void Main()
    {
    try
    {
    // 1.创建一个 OracleConnection 对象连接到 Oracle 数据库,然后打开该连接
    OracleConnection myOracleConnection
    = new OracleConnection("User Id=scott;Password=tiger;Data Source=webapp");
    myOracleConnection.Open();
    // 2.创建一个OracleTransaction对象
    // 调用OracleConnection对象的BeginTransaction()方法启动事务
    OracleTransaction myOracleTransaction = myOracleConnection.BeginTransaction();
    // 3.创建一个 OracleCommand 对象,用于存储 SQL 语句
    OracleCommand myOracleCommand = myOracleConnection.CreateCommand();
    // Transaction 属性初始化
    myOracleCommand.Transaction = myOracleTransaction;
    // 4.向表 userinfo 中添加一条记录tomcat
    myOracleCommand.CommandText = "INSERT INTO userinfo values('tomcat')";
    myOracleCommand.ExecuteNonQuery();
    // 5.向表 userinfo 中添加第二条记录eclipse
    myOracleCommand.CommandText = "INSERT INTO userinfo values('eclipse')";
    myOracleCommand.ExecuteNonQuery();
    // 6.事务回滚操作
    myOracleTransaction.Rollback();
    // 7.向表 userinfo 中添加第三条记录java
    myOracleCommand.CommandText = "INSERT INTO userinfo values('java')";
    myOracleCommand.ExecuteNonQuery();
    // 操作完成后使用 Close() 方法关闭 OracleConnection 对象
    myOracleConnection.Close();
    //为了省事,统一捕获异常信息(实际项目开发中不推荐!)
    }catch(Exception e){
    //打印异常信息到控制台
    System.Console.Write(e.Message);
    }
    }
    }