Aplikacja .NET C# korzystająca z danych w MS SQL Server cz.1

21-sie-2013

W tym artykule pokażę, jak można z aplikacji w c# sięgać do bazy danych SQL. Artykuł jest częścią serii artykułów na ten temat prezentujących różne sposoby.

PRACA Z STRONGLY TYPED DATASET

Najpierw utwórz DataSet. Zakładam, że masz już serwer SQL i że na serwerze zdefiniowałeś odpowiednie tabele, może już nawet częściowo wypełniłeś je danymi.

Będąc w Visual Studio dodaj do swojego projektu DataSet:

strongly-data-set

Nadaj mu odpowiednią nazwę. Ja zostawiłem tu DataSet1, ale to nie jest dobry pomysł, ponieważ dataset czymś powinien się wyróżniać, np. jeśli piszesz aplikację dla sklepu nazwij go ShopDS…

Następnie z Visual Studio połącz się do bazy danych korzystając z Database Explorer-a. Otwórz serwer, otwórz bazę i przeciągnij tabelę lub tabele do swojego DataSeta.

Taki dataset zawiera w sobie definicje klas, za pomocą, których możesz dokonywać wszelkich modyfikacji w tabeli z bazy danych. Te klasy zostały dla ciebie wygenerowane. Na dodatek, kiedy będziesz pracował z rekordem (w moim przykładzie będzie to zazwyczaj obiekt row), to obiekt ten ma takie właściwości, jak kolumny w tabeli. Nie musisz, więc obawiać się o literówki, które spowodowałyby błąd aplikacji podczas wykonania. Wszelkie błędy zostaną znalezione podczas kompilacji programu.

data-table-adapter

Mój dataset ma teraz definicję klasy VATRate, który z kolei zna strukturę odpowiedniej tabeli z bazy danych. Ma też metody Fill i GetData, z których mogę korzystać, aby pobierać rekordy z bazy danych.

Wyświetlenie rekordów

Dodaj teraz do swojej aplikacji formularz (Form dla aplikacji Windows lub WebForm dla aplikacji Web).  Na formularzu umieść GridView, za pomocą, którego będzie można wyświetlić rekordy.

Zapewne chcesz, aby formularz wypełnił się danymi po załadowaniu formy. Dlatego w zdarzeniu Page_load (lub Form_load) musisz połączyć się do danych i zapełnić nimi GridView. Ponieważ czynności te mogą się przydać jeszcze w innym miejscu, warto chyba stworzyć własną metodę

public void GetData()
A w niej umieść:
DataSet1 dts = new DataSet1();
TestSQL.DataSet1TableAdapters.VATRateTableAdapter adapter1 = new TestSQL.DataSet1TableAdapters.VATRateTableAdapter();
adapter1.Fill(dts.VATRate);
GridView1.DataSource = dts;
GridView1.DataBind();

Czyli po kolei:

  • Zadeklaruj dataseta dts typu DataSet1
  • Utwórz obiekt adaptera adapter1 (również wygenerowanego podczas budowania DataSet1)
  • Przy pomocy Adaptera pobierz dane do dataseta z bazy danych (metoda Fill)
  • Podepnij wypełniony już dataset do GridView (czyli właściwość DataSource Grida wskazuje na obiekt dts)
  • Wywołaj DataBind, aby GridView zauważył zmianę. (Czyli wywołaj DataBind)
  • Wyświetlenie rekordów masz już z głowy.

Jak dodać rekord?

Załóżmy, że masz już odpowiednie pola tekstowe na formularzu do odczytania nazwy, wartości itp… Chcesz, aby po kliknięciu OK. rekord zapisał się w bazie. Zróbmy to tak:

DataSet1 ds = (DataSet1)(GridView1.DataSource);
DataSet1.VATRateDataTable dt = ds.VATRate;
DataSet1.VATRateRow row = dt.NewVATRateRow();
row.Date = DateTime.Now;
row.Description =………;
row.IsActive = true;
row.Name = ………..;
dt.Rows.Add(row);
TestSQL.DataSet1TableAdapters.VATRateTableAdapter adapter = new TestSQL.DataSet1TableAdapters.VATRateTableAdapter();
adapter.Update(row);
Button1.Text = row.Id.ToString();
GetData();
  • Pobierasz dataseta. Twój GridView już go zna i przechowuje we właściwości DataSource, wystarczy więc zrzutować go na DataSet1.
  • Rekord zostanie dodany do jednej tabelki, więc trzeba ją wydobyć z DataSeta. Typ dla tej tabeli został utworzony podczas generowania dataseta.
  • Do tej tabeli trzeba dodać nowy rekord, posłuży do tego metoda NewVATRateRow
  • Kolejne instrukcje przepisują do tego nowego rekordu wartości (wykropkowane miejsca należy zamienić na nazwy kontrolek, do których użytkownik wpisał swoje dane). I tak należy przepisać wszystko, co trzeba do wypełnienia rekordu
  • Ten nowy rekord dodajesz teraz do kolekcji Rows twojej tabelki.
  • Znowu jest potrzebny adapter, aby tym razem przesłać do bazy danych nowe rekordy.
  • Adapter wywołuje metodę update wskazując rekord, który należy przesłać do bazy.
  • Jeśli tabela wykorzystywała kolumnę IDENTITY, to nowo wygenerowany numer rekordu możesz pobrać wywołując row.Id. Tak! Update zadbał o to, żeby w tym miejscu pojawiła się nowo wygenerowana wartość autonumerowania!
  • Na koniec wywołaj metodę GetDate, aby GridView odświeżył widoczne dla niego dane.

 Jak usunąć rekord?

Zakładam, że znasz ID rekordu, który chcesz usunąć. W takim przypadku:

DataSet1 ds = (DataSet1)GridView1.DataSource;
DataSet1.VATRateRow row = ds.VATRate.FindById(int.Parse(Id.Text));
row.Delete();
TestSQL.DataSet1TableAdapters.VATRateTableAdapter adapter = new TestSQL.DataSet1TableAdapters.VATRateTableAdapter();
adapter.Update(row);
GetData();
  • Po pierwsze na podstawie GridView wyciągasz swojego DataSeta.
  • W DataSecie odnajdujesz wiersz (rekord) z określonym ID. W moim przypadku ID znajdował się w polu tekstowym Id, więc musiałem sięgnąć do jego właściwości Text i sparsować ten tekst.
  • Potem kasujesz rekord (na razie z data seta).
  • Jakoś trzeba wysłać polecenie usuwania do bazy danych, więc potrzebny będzie adapter.
  • Dla adaptera wykonujesz polecenie Update.
  • Po wszystkim wypada odświeżyć dane w Gridzie.

Jak edytować rekord?

Znowu zakładam, że znasz ID rekordu, który chcesz zmodyfikować.

DataSet1 ds = (DataSet1)GridView1.DataSource;
DataSet1.VATRateRow row = ds.VATRate.FindById(int.Parse(Id.Text));
row.Name = Name.Text;
TestSQL.DataSet1TableAdapters.VATRateTableAdapter adapter = new TestSQL.DataSet1TableAdapters.VATRateTableAdapter();
adapter.Update(row);
GetData();
  • Po pierwsze zapamiętujesz Data Set
  • Po drugie w tym datasecie szukasz rekordu wskazywanego przez ID
  • Skoro masz już rekord zapamiętujesz w nim zmiany wprowadzone przez użytkownika
  • Potem tworzysz obiekt adaptera
  • I adapterem wysyłasz zmiany do bazy danych
  • Na koniec odświeżasz Grida.

 

Komentarze są wyłączone

Autor: Rafał Kraik