Home   Cover Cover Cover Cover
 

Lokale Transaktion


Zu Abschnitt 5.3.4 des Buchs

Dieses Beispiel zeigt, wie man für eine Verbindung eine Transaktion erzeugen und mehrere Kommandos innerhalb dieser Transaktion ausführen kann. Mit der Methode BeginTransaction wird eine Transaktion erzeugt. Nun wird beim Kommandoobjekt diese Transaktion gesetzt und dann zwei unterschiedliche DELETE-Kommandos ausgeführt. Beide werden entweder mit Commit übernommen oder mit Rollback zurückgenommen.

5-3-4-LocalTransactionSample.cs
using System;
using System.Data;
using System.Data.SqlClient;

namespace Chapter5
{

    public class LocalTransactionSample
    {

        public static void Main()
        {
            string connStr = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=Northwind; " +
               "Integrated Security=True;";

            SqlConnection con = new SqlConnection(connStr);
            IDbTransaction trans = null;
            try
            {
                con.Open();
                //----- Kommandoobjekt anlegen
                IDbCommand cmd = con.CreateCommand();
                //----- Beginn einer benutzerdefinierten Transaktion, die zwei SQL-Anweisungen umfasst
                trans = con.BeginTransaction();
                cmd.Transaction = trans;

                //Bestellungen loeschen
                cmd.CommandText = "DELETE [Order Details] WHERE OrderID = 10258";
                cmd.ExecuteNonQuery();
                //Bestellkopf loeschen
                cmd.CommandText = "DELETE Orders WHERE OrderID = 10258";
                cmd.ExecuteNonQuery();
                trans.Commit(); // Transaktion erfolgreich beenden
            }
            catch (Exception e)
            {
                if (trans != null)
                    trans.Rollback(); // Transaktion abbrechen und Aenderungen rueckgngig machen
                Console.WriteLine(e.ToString());
            }
            finally
            {
                try { con.Close(); }
                catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            }
        }

    }
}