2009-06-01 3 views

Antwort

25

In der Tat gibt es einen Weg.

connection.EnlistTransaction(Transaction.Current) 

Es funktioniert und es funktioniert nicht notwendig, verteilt fördert Transaktion, wenn nicht (im Gegensatz zu, was Dokumentation sagt)

HTH

4

Um eine Verbindung in ein TransactionScope zu erstellen, müssen Sie in der Verbindungszeichenfolge 'Enlist=true' angeben und die Verbindung im Bereich dieses TransactionScope-Objekts öffnen.

Sie können SqlConnection.BeginTransaction für eine bestehende Verbindung verwenden.

aktualisieren: Können Sie BeginTransaction wie folgt verwenden:

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

    SqlCommand command = connection.CreateCommand(); 
    SqlTransaction transaction; 

    // Start a local transaction. 
    transaction = connection.BeginTransaction("SampleTransaction"); 

    // Must assign both transaction object and connection 
    // to Command object for a pending local transaction 
    command.Connection = connection; 
    command.Transaction = transaction; 

    ... 
    ... 

} 
+0

Die Sache ist, die Verbindung im Vorfeld der Transaction Instanziierung geöffnet wird; daher der Grund für meine Frage. –

+0

@Mitch, fördert die connection.BeginTransaction ("SampleTransaction") nicht zu einer verteilten Transaktion (DTC) in irgendeinem Szenario? Wenn ja, was sind diese Szenarien? – Baig

3

Nach mehr Forschung, die Antwort auf meine Frage entpuppte:

Nein, muss die Verbindung nach der geöffnet werden Das TransactionScope-Objekt wird instanziiert.

Verwandte Themen