Эквивалент Oracle для SQLConnection.BeginTransaction (String TransactionName) - PullRequest
0 голосов
/ 14 марта 2011

Я пытался повторить SQLConnection.BeginTransaction (String TransactionName) для оракула. Существует класс OracleConnection.BeginTransaction, но мне не удалось найти перегрузку для метода, чтобы указать имя транзакции, которую необходимо использовать. Любая помощь в этом будет оценена.

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 14 марта 2011

Я думаю, что вам может потребоваться выполнить SQL-оператор SET TRANSACTION с параметром NAME перед началом транзакции.

0 голосов
/ 14 марта 2011

Объект OracleTransaction не имеет какого-либо строкового члена, который возвращает «имя». Я думаю, что это главный вопрос.

OracleConnection.BeginTransaction () возвращает объект OracleTransaction, поэтому я не могу понять, как он должен иметь возможность назначать имя транзакции.

Надеюсь, это поможет.

0 голосов
/ 14 марта 2011

Возможно, вы сможете наследовать от класса DbConnection и создать собственную перегрузку метода BeginTransaction ().Тогда вам придется наследовать от класса DbTransaction, чтобы создавать свои собственные перегрузки методов Commit () и Rollback ().Затем используйте это вместе с объектами DbProviderFactory и DbCommand.

0 голосов
/ 14 марта 2011

Вы можете связать транзакцию с объектом Command.Когда эта команда будет выполнена, соединение будет выполнено в контексте этой транзакции.

Существует также свойство Connection объекта транзакции, которое можно использовать для указания соединения, связанного с транзакцией.

См. Этот пример из MSDN :

using (OracleConnection connection = new OracleConnection(connectionString))
{
    connection.Open();

    OracleCommand command = connection.CreateCommand();
    OracleTransaction transaction;

    // Start a local transaction
    transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
    // Assign transaction object for a pending local transaction
    command.Transaction = transaction;

    try
    {
        command.CommandText = 
            "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
        command.ExecuteNonQuery();
        command.CommandText = 
            "INSERT INTO Dept (DeptNo, Dname, Loc) values (60, 'ENGINEERING', 'KANSAS CITY')";
        command.ExecuteNonQuery();
        transaction.Commit();
        Console.WriteLine("Both records are written to database.");
    }
    catch (Exception e)
    {
        transaction.Rollback();
        Console.WriteLine(e.ToString());
        Console.WriteLine("Neither record was written to database.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...