Как использовать oracledataadapter с транзакцией? - PullRequest
2 голосов
/ 29 марта 2012

Я использую метод для получения таблицы с использованием операторов выбора. Когда я использую оператор выбора с использованием базы данных ссылок, я получил ошибку (ORA-01453 SET TRANSATION должен быть первым оператором перехода.)

Я знаю решение, но я не могу использовать метод транзакции с 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 Ответ

3 голосов
/ 29 марта 2012

По сути, вы можете сделать что-то вроде этого:

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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...