Oracle等效于SQLConnection.BeginTransaction(String TransactionName)

时间:2011-03-14 10:42:36

标签: c# asp.net oracle

我一直在尝试为oracle复制SQLConnection.BeginTransaction(String TransactionName)。有一个类OracleConnection.BeginTransaction,但是我无法找到方法的重载来指定需要使用的事务的名称。任何有关这方面的帮助将不胜感激。

先谢谢

4 个答案:

答案 0 :(得分:1)

我认为您可能需要在开始事务之前使用NAME参数执行SET TRANSACTION SQL语句。

答案 1 :(得分:0)

您可以从DbConnection类继承并创建自己的BeginTransaction()方法的重载。然后你必须继承DbTransaction类来创建自己的Commit()和Rollback()方法的重载。然后将它与DbProviderFactory和DbCommand对象一起使用。

答案 2 :(得分:-1)

您可以将事务与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.");
    }
}

答案 3 :(得分:-1)

对象OracleTransaction没有任何返回“name”的字符串成员。 我认为这是要面对的主要问题。

OracleConnection.BeginTransaction()返回一个OracleTransaction对象,因此我无法确定它应该如何为事务指定名称。

我希望它有所帮助。