Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- 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.
- 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.
- Führen Sie die erforderlichen Befehle aus.
- 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