在asp.net 里,连接oracle数据库
在一个Button1_Click里面完成下面3个操作(.net的.aspx.cs页面)string str1 = "insert into table1 (name1) values ('"+TextBox1.Text+"')";
OracleCommand com1 = new OracleCommand(str1, conn);
conn.Open();
com1.ExecuteNonQuery();
conn.Close();string str2 = "insert into table2 (name2) values ('"+TextBox2.Text+"')";
OracleCommand com2 = new OracleCommand(str2, conn);
conn.Open();
com2.ExecuteNonQuery();
conn.Close();string str3 = "update table3 set name3= '"+TextBox2.Text+"' ";
OracleCommand com3 = new OracleCommand(str3, conn);
conn.Open();
com3.ExecuteNonQuery();
conn.Close();如果一个语句没执行成功,回滚到原来的状态,全部执行成功了才提交,这个应该用事务处理来做吧,应该怎么写啊

解决方案 »

  1.   

    你的oracle数据库是什么版本的?
      

  2.   


        Oracle了解的不多,但是你现在这样写会跟 12306一样 
      

  3.   

    oracle 是强制事务的,如果不提交,上面三条都不会进数据库的,除非把用户设置成默认提交,也就是如果在默认状态,上面三句话,不会执行成功。如果此类操作比较多,最好使用orm框架,可以显示事务、面向对象的代码,保证用户实例的完整等优点。
      

  4.   

    如果你没什么经验,可以使用nhibernate ibatis.net 或者 EF ,我个人没用过EF,所以推荐你用nhibernate
    如果还是不知道的话,你可以搜索一下李天平大神的代码生成器,里面可以生成nhibernate代码。
    如果还是不知道的话,就只能具体问题具体分析了。
      

  5.   

    这跟数据库版本有啥关系,
    可以定义一个OracleTransaction对象
    OracleTransaction transaction = conn.BeginTransaction();
    然后把transaction赋值给三个OracleCommand对象的Transaction属性
    最后用transaction.Commit();提交
    失败就transaction.Rollback()回滚
    可以用一个command对象提交
    BEGIN
      INSERT INTO TABLE1......;
      INSERT INTO TABLE2......;
      UPDATE TABLE3 SET ......;
      COMMIT;
    EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK;
    END;
      

  6.   

    我们先把数据的连接字符串写在Web.config里:
    <appSettings>
    <add key="oracleconn" value="User ID=用户名;Password=密码;Data Source=数据库服务名;"/>
    </appSettings>
    public System.Data.OracleClient.OracleConnection objConn; //声明一个OracleConnection对象
    public System.Data.OracleClient.OracleCommand objCmd; //声明一个OracleCommand对象protected void Page_Load(object sender, EventArgs e)
    {string strcon = System.Configuration.ConfigurationManager.AppSettings["oracleconn"];
    //从Web.config 文件里调用数据库连接字符串
    objConn = new OracleConnection(strcon); 
    }
      

  7.   


    大体代码如下: OracleConnection conn = new OracleConnection("server=.,database=mytable,uid=sa,pwd=123");//创建数据库连接        OracleTransaction transaction = conn.BeginTransaction();//开始处理事务        try
            {
                string str1 = "insert into table1 (name1) values ('" + TextBox2.Text + "')";
                
                OracleCommand com1 = new OracleCommand(str1, conn);
                com1.ExecuteNonQuery();
                string str2 = "insert into table2 (name2) values ('" + TextBox2.Text + "')";
                OracleCommand com2 = new OracleCommand(str2, conn);
                com2.ExecuteNonQuery();
                string str3 = "update table3 set name3= '" + TextBox2.Text + "' ";
                OracleCommand com3 = new OracleCommand(str3, conn);
                com3.ExecuteNonQuery();
                transaction.Commit();//提交事务
                conn.Close();
            }
            catch (Exception ex)
            {
                transaction.Rollback();//回滚
            }
      

  8.   

    为什么总是回滚OracleConnection conn = new OracleConnection("server=.,database=mytable,uid=sa,pwd=123");//创建数据库连
    string str1 = "insert into table1 (name1) values ('" + TextBox2.Text + "')";
                conn.Open();            OracleCommand com1 = new OracleCommand(str1, conn);
                com1.ExecuteNonQuery();
                string str2 = "insert into table2 (name2) values ('" + TextBox2.Text + "')";
                OracleCommand com2 = new OracleCommand(str2, conn);
                com2.ExecuteNonQuery();
                string str3 = "update table3 set name3= '" + TextBox2.Text + "' ";
                OracleCommand com3 = new OracleCommand(str3, conn);
                com3.ExecuteNonQuery();            conn.Close();
    这段代码运行没问题,为什么在事务里总是回滚