日期:2014-05-17  浏览次数:20380 次

关于try-catch和oracle事务
在asp.net一个Button1_Click事件里,try-catch里,用了事务的一个语句
数据库是oracle
C# code

protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            //其他代码

            OracleConnection conn = new OracleConnection(ConnectionString);
            OracleTransaction transaction = null;
            OracleCommand cmd = null;
            try
            {
                conn.Open();
                transaction = conn.BeginTransaction();//事务开始

                cmd = conn.CreateCommand();
                cmd.CommandText = "insert into table1 (name) values ('abc')";
                cmd.Transaction = transaction;
                cmd.ExecuteNonQuery();

                transaction.Commit();//提交
                Response.Redirect("index.aspx");
            }
            catch 
            {
                transaction.Rollback();//回滚    
            }
            finally
            {
                if (cmd != null) cmd.Dispose();
                if (conn != null)
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
        }
        catch (Exception ex)
        {
            
        }
    }


运行,在"transaction.Rollback();//回滚" 这里捕捉到异常:
System.InvalidOperationException: 此 OracleTransaction 已完成;不再可用。 在 System.Data.OracleClient.OracleTransaction.AssertNotCompleted() 在 System.Data.OracleClient.OracleTransaction.Rollback() 在 ceshi_oracle.Button1_Click(Object sender, EventArgs e)

如果没有Response.Redirect("index.aspx");是没有异常的

出了异常,但是程序能正常运行,这个异常怎样去掉

------解决方案--------------------
catch (OracleException ex)
捕获确定的异常。