如何在事务中使用oracledataadapter?

时间:2012-03-29 11:43:33

标签: c# oracle transactions

我使用一个方法来使用Select statiments获取。当我使用链接数据库使用选择statiment时我得到错误(ORA-01453 SET TRANSATION必须是第一个转换语句。)

我知道solition但我不能使用Transaction methot和Oracledataadapter。

我想使用Commit()... Rollback()。

这是我的代码:

private System.Data.DataTable GetDataTable_(string SqlStatement, bool fromProcCall)
        {

            OracleConnection Con = new OracleConnection();
            try
            {
                Con = Connection();
                OpenConnection(Con, fromProcCall);

                //-----------------------------------------
                DateTime startTime = DateTime.Now;
                //-----------------------------------------
                DataSet ds = new DataSet();

                OracleDataAdapter sda = new OracleDataAdapter(SqlStatement, Con);                
                sda.Fill(ds, "tbl1");
                //-----------------------------------------
                if (!fromProcCall)
                    DurationOfIfsAction = DateTime.Now.Subtract(startTime).Milliseconds;
                else
                    DurationOfFirstIfsAction = DateTime.Now.Subtract(startTime).Milliseconds;
                //-----------------------------------------

                CloseConnection(Con);
                return ds.Tables[0];
            }
            catch (Exception ex)
            {
                if (Con != null)
                {
                    try
                    {
                        CloseConnection(Con);
                    }
                    catch (Exception) { }
                }
                throw new Exception("ERROR[" + ex.Message + "]");
            }
        }

1 个答案:

答案 0 :(得分:3)

基本上,你可以这样做:

oraConn = new OracleConnection("CONNECTION STRING");
oraConn.Open();

//Command with transaction
OracleCommand oraCom = oraConn.CreateCommand();
oraCom.CommandText = "INSERT QUERY";
oraCom.Transaction = oraCom.Connection.BeginTransaction(IsolationLevel.ReadCommitted);

//Execute
if (oraCom.Connection.State == ConnectionState.Closed)
{
      oraCom.Connection.Open();
}

oraCom.ExecuteNonQuery();

//Commit / Rollback
oraCom.Transaction.Commit(); // or oraCom.Transaction.Rollback();

要在DataAdapter中使用它,概念是相同的:创建事务设置DataAdapter.SelectCommand.Transaction,然后您可以使用Commit()Rollback()进行控制。