Programowanie w MS Visual Studio 2005 z wykorzystaniem MS

Transkrypt

Programowanie w MS Visual Studio 2005 z wykorzystaniem MS
Programowanie w MS Visual Studio 2005 z
wykorzystaniem MS SQL Server 2005
Lekcja 5
Transakcje w aplikacjach Windows Forms z użyciem języka C#.
Wymagania:
 Znajomośd podstaw transakcji
 Plik lekcja_1.mdf zawierający Bazę Danych
1. Szkielet programu wykorzystującego transakcje
private static void Demo1()
{
try
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlTransaction transaction =
connection.BeginTransaction(IsolationLevel.ReadCommitted,
"transakcja");
string sqlCommand = "UPDATE pracownik SET Imie=’xxx’ WHERE ID=4";
SqlCommand Command = new SqlCommand(sqlCommand, connection,
transaction);
Command.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception)
{
try
{
transaction.Rollback();
}
catch (Exception)
{
MessageBox.Show("BŁĄD Z ROLLBACK ");
}
}
}
Jest to mniej więcej szkic programu wykonującego transakcję. Oczywiście w prawdziwych programach
operacje są dużo bardziej skomplikowane.
Często to użytkownik wywołuje wycofanie transakcji a nie tylko ew. błąd w bazie.
Nazwy są takie same jak w SQL i wywoływane są jako metody odpowiednich klas, i tak:
 SqlConnection.BeginTransaction(…) rozpoczyna transakcję
 SqlTransaction.Comit() – próbuje zakooczyd transakcję
 SqlTransaction.Rollback() – wycofuje transakcję
Transakcje mają siedem poziomów izolacji:
 Chaos – jedynie zmiany dokonane przez transakcje o wyższym stopniu izolacji nie mogą byd
nadpisane
 ReadCommitted – zakładane są blokady aby uniknąd czytania z brudnopisu, ale dane mogą byd
zmienione przed zakooczeniem transakcji





ReadUncommitted – możliwe jest czytanie z brudnopisu, nie zakładane są żadne blokady
RepeatableRead – blokady założone na wszystkie
dane uniemożliwiające zmiany danych przez innych
użytkowników, możliwy jest jednak nadal odczyt
sztucznych danych
Serializable – zakładane są blokady na przedziały danych, inni użytkownicy nie mogą ich zmieniad i
dodawad
Snapshot – tworzona jest kopia danych którą może czytad
inna transakcja, kiedy inna modyfikuje oryginalne dane.
Dzięki temu niemożliwe jest podejrzenie zmian które
dokonują inne transakcje
Unspecified – inny nieznany poziom izolacji jest ustawiony
2. Cele Programu
Chcemy umożliwid edycję danych przez dwóch użytkowników jednocześnie. Problemem jest fakt, iż
pracujemy na kopii danych z naszej bazy zapisanej w
DataSet. Oczywistym rozwiązaniem są transakcje które „poinformują” bazę danych o trwających zmianach a
ta nie pozwoli na edycję, już edytowanych danych.
Aplikacja z kolei poinformuje użytkownika o tym, że jego edycja została odrzucona. Dodamy do tego konsolę
opisująca akcje wykonywane na bazie.
Oto efekt koocowy:
1. Pierwsza aplikacja:
2. Druga aplikacja
Plik zawierający przykładowy projekt w tym samym katalogu co lekcja.