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.