Kann ich einen Verweis auf eine ausstehende Transaktion von einem SqlConnection-Objekt abrufen?

Angenommen, jemand (außer mir) schreibt den folgenden code und kompiliert ihn in eine assembly:

using (SqlConnection conn = new SqlConnection(connString)) 
{
    conn.Open();
    using (var transaction = conn.BeginTransaction())
    {
        /* Update something in the database */
        /* Then call any registered OnUpdate handlers */
        InvokeOnUpdate(conn);

        transaction.Commit();
    }
}

Den Aufruf InvokeOnUpdate(IDbConnection conn) ruft einen event-handler, kann ich implementieren und registrieren. So, in diesem hf habe ich einen Verweis auf die IDbConnection-Objekt, aber ich nicht ein Verweis auf die ausstehende Transaktion. Gibt es eine Möglichkeit, in denen ich einen halt bekommen können von der Transaktion? In meinem OnUpdate-handler, die ich ausführen möchten etwas ähnlich dem folgenden:

private void MyOnUpdateHandler(IDbConnection conn) 
{
    var cmd = conn.CreateCommand();
    cmd.CommandText = someSQLString;
    cmd.CommandType = CommandType.Text;

    cmd.ExecuteNonQuery();
}

Jedoch der Aufruf von cmd.ExecuteNonQuery() wirft eine InvalidOperationException beschwert, dass

"ExecuteNonQuery erfordert der Befehl
eine Transaktion, wenn die
Verbindung dem Befehl zugewiesen ist
in einem anhängigen lokale Transaktion. Die
Transaktion-Eigenschaft des command -
wurde nicht initialisiert".

Kann ich in keiner Weise gewinnen meine SqlCommand cmd mit der anstehenden Transaktion? Kann ich abrufen, einen Verweis auf die ausstehende Transaktion von der IDbConnection-Objekt (ich würde gerne reflektion verwenden, wenn nötig)?

InformationsquelleAutor der Frage Rune | 2009-01-06

Schreibe einen Kommentar