Freigeben über


Durchführen einer Transaktion mit ADO.NET

Mit den Objekten Connection und Transaction können Sie eine Transaktion beginnen oder einen Commit oder Rollback für sie durchführen. Befolgen Sie zum Durchführen einer Transaktion die folgenden Schrittanweisungen.

So führen Sie eine Transaktion durch

  1. Rufen Sie die BeginTransaction-Methode des Connection-Objekts auf, um den Start der Transaktion festzulegen. Die BeginTransaction-Methode gibt einen Verweis auf das Transaction-Objekt zurück. Dieser Verweis wird den in die Transaktion eingetragenen Command-Objekten zugewiesen.
  2. Weisen Sie das Transaction-Objekt der Transaction-Eigenschaft des auszuführenden Commands zu. Wenn ein Command für ein Connection-Objekt mit einer aktiven Transaction ausgeführt wird und das Transaction-Objekt nicht der Transaction-Eigenschaft des Commands zugewiesen wurde, wird eine Ausnahme ausgelöst.
  3. Führen Sie die erforderlichen Befehle aus.
  4. Rufen Sie die Commit-Methode des Transaction-Objekts auf, um die Transaktion abzuschließen, oder die Rollback-Methode, um die Transaktion abzubrechen.

Das folgende Codebeispiel demonstriert die Transaktionslogik unter Verwendung von ADO.NET mit Microsoft® SQL Server™.

Dim myConnection As SqlConnection = New SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;")
myConnection.Open()

' Start a local transaction.
Dim myTrans As SqlTransaction = myConnection.BeginTransaction()

' Enlist the command in the current transaction.
Dim myCommand As SqlCommand = myConnection.CreateCommand()
myCommand.Transaction = myTrans

Try
  myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
  myCommand.ExecuteNonQuery()
  myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
  myCommand.ExecuteNonQuery()
  myTrans.Commit()
  Console.WriteLine("Both records are written to database.")
Catch e As Exception
  Try
    myTrans.Rollback()
  Catch ex As SqlException
    If Not myTrans.Connection Is Nothing Then
      Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
                        " was encountered while attempting to roll back the transaction.")
    End If
  End Try

  Console.WriteLine("An exception of type " & e.GetType().ToString() & _
                    "was encountered while inserting the data.")
  Console.WriteLine("Neither record was written to database.")
Finally
  myConnection.Close()
End Try
[C#]
SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
myConnection.Open();

// Start a local transaction.
SqlTransaction myTrans = myConnection.BeginTransaction();

// Enlist the command in the current transaction.
SqlCommand myCommand = myConnection.CreateCommand();
myCommand.Transaction = myTrans;

try
{
  myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
  myCommand.ExecuteNonQuery();
  myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
  myCommand.ExecuteNonQuery();
  myTrans.Commit();
  Console.WriteLine("Both records are written to database.");
}
catch(Exception e)
{
  try
  {
    myTrans.Rollback();
  }
  catch (SqlException ex)
  {
    if (myTrans.Connection != null)
    {
      Console.WriteLine("An exception of type " + ex.GetType() +
                        " was encountered while attempting to roll back the transaction.");
    }
  }

  Console.WriteLine("An exception of type " + e.GetType() +
                    "was encountered while inserting the data.");
  Console.WriteLine("Neither record was written to database.");
}
finally
{
  myConnection.Close();
}

Siehe auch

Datenzugriff mit .NET Framework-Datenprovidern | OleDbConnection-Klasse | OleDbTransaction-Klasse | SqlConnection-Klasse | SqlTransaction-Klasse | OdbcConnection-Klasse | OdbcTransaction-Klasse