Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

WPF i MySQL– jak to ugryźć jak nie wiem o co chodzi ?

Witam. Ostatnio biorę udział w tworzeniu dość ciekawego systemu w typowo webowej formie. Sam projekt wygląda ciekawie i na pewno przy jego tworzeniu dojdą kolejne „plusy” do doświadczenia. Jednak nie o tym tutaj ma być mowa. Wpadliśmy razem ze znajomymi na pomysł, żeby urozmaicić projekt i umożliwić prace z systemem również dla osób, które nie lubią przeglądarkowych wersji, a wola klasyczne desktopowe aplikacje. Jednak co dalej oprócz pomysłu?

Plan działania

No dobrze, pomysł jest, czas to jakoś ukształtować. Po pobieżnych oględzinach dwóch, może trzech artykułów i znajomości w wartości większej niż 1% programu Visual Studio i podpowiedzi djfoxera co do używanej wersji padło na napisanie takiej aplikacji jako WPF. Brzmi zachęcająco i obiecująca, lecz jak tego dokonać nie mając o tym pojęcia?

Jak to mówią, świat do odważnych należy, a widząc co djfoxer wyrabia tutaj na blogu ze swoja aplikacja postanowiłem nie być gorszy i nauczyć się czegoś nowego, a może za lat kilkaset cos razem napiszemy ;)

r   e   k   l   a   m   a

No to do dzieła. W naszym przypadku projekt oparty jest na MySQL, więc należy uprzednio pobrać Connector tego języka, by moc uzyskać połączeni z bazą danych. Dokonamy tego tutaj: http://dev.mysql.com/downloads/connector/net/ klikając na link z download ukazany na obrazku.

Instalacja przebiega bezproblemowo i nie jest skomplikowana, tak więc nie będę jej tutaj opisywał.

Co dość fajne, dla osób, które chcą poćwiczyć można pokusić się o użycie SQLite, który bardzo często wykorzystywany jest w aplikacjach mobilnych. Da się to również „podpiąć” ładnie z PHP. Wtedy bazę danych mamy w jednym pliku i możemy ją w łatwy sposób dzielić, czy zabierać ze sobą. Dość praktyczne rozwiązanie, jednak w naszym przypadku nie mieliśmy za dużo do powiedzenia, gdyż projekt z góry narzucał użycie MySQL. W przypadku użycia SQLite należy oczywiście pokusić się o instalacje connectora SQLite.

Dobra, czas działać. Uruchamiamy VS i tworzymy nowy projekt WPF.

Po jego utworzeniu widzimy nasz ”program”, my jednak przechodzimy na zakładkę XAML znajdująca się poniżej, gdzie troszkę „upiększymy” nasz interfejs dodając przycisk sprawdzający połączenie z bazą danych za pomocą kodu:

<Button Content="Mój przycisk" Width="250px" Height="50px" Name="Wykonajakcje" Click="Wykonajakcje_Click"></Button>

Oczywiście możemy dodać przycisk i inne elementy do naszego okna przesuwając je z lewego paska „Assets”. Ja jednak, jeszcze za namową alucosoftware staram się zawsze pisać kod z palca, co pozwala bardziej „wbić” mu się w pamięć.

Jak możesz zauważyć, po przejściu ponownie na zakładkę Design widać nasz przycisk , a po skompilowaniu programu (F5) jest on widoczny na naszym pulpicie, jednak przycisk, który dodaliśmy możemy naciskać w nieskończoność i nic się nie stanie.

Czas na magię

Jak zapewne zauważyłeś drogi czytelniku nasz przycisk nazywa się „Wykonajakcje”. Włączmy Solution Explorer za pomocą skrótu CTRL+; i rozwińmy ostatnią gałąź wybierając plik z rozszerzeniem .cs To w nim dzieje się cała magia i działanie naszego programu.

Dodajmy zdarzenie, które zareaguje na naciśnięcie naszego przycisku:

private void Wykonajakcje_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Przycisk został użyty");
        }

Na sam początek, by sprawdzić czy wszystko działa wyświetlmy sobie wyżej wpisaną wiadomość. Sprawdzamy działanie.

Jak widać nasz kawałeczek kodu działa jak należy. Idźmy więc dalej

Całość kodu odpowiedzialnego za połączenie z bazą danych proponuję umieścić w bloku try/catch, który pomoże wyłapać błędy w przysmaku, kiedy połączenie z bazą danych się nie powiedzie. Warto się przed tym zabezpieczyć, aby nie „wykrzaczyć” programu.

private void Wykonajakcje_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                //Tutaj będzie kod działania programu
               MessageBox.Show("Przycisk został użyty");
            }
            catch (Exception blad)
            {
		   // A to obsłuży nasze błędy pokazując w oknie wiadomości błąd I informację dlaczego nie możemy się połączyć. 
                MessageBox.Show(blad.Message);
            }
        }

Oto string zamknięty w zmiennej mojePolaczenie, który posłuży nam za połączenie z bazą danych.

Oczywiście należy zmienić poszczególne parametry jak nazwa bazy danych, hasło, nasza użytkownika i adres serwera.

Teraz zanim przystąpimy do pisania dodajmy nasz connector SQL do referencji projektu. W tym celu naciskamy w Solution Explorer na References prawym przyciskiem myszki, wybieramy Add refernce i w oknie, które nam wyskoczy wyszukujemy nawet po haśle SQL wymagana linijkę, zaznaczamy ją i klikamy OK.

Jak widać poniżej nasza referencja została dodana.

Teraz dodajemy przestrzenie naz jakich będziemy używali:

Using. System.Data;

oraz

using MySql.Data.MySqlClient;

Następnie za pomocą kawałka kodu stwórzmy w naszym evencie obiekt, czyli nasze połączenie:

MySqlConnection Polaczenie = new MySqlConnection(mojePolaczenie);

Oraz otwórzmy je linijką:

Polaczenie.Open();

Na koniec warto wyświetlić powiadomienie o tym, że połączenie zakończyło się sukcesem

 MessageBox.Show("Przycisk został użyty");

Po wykonaniu operacji można zamknąć nasze połączenie.

Polaczenie.Close();

Sprawdźmy działanie. Program działa i ma się całkiem dobrze. Połączenie z naszą bazą zostaje nawiązane, co już jest sukcesem samym w sobie :)

Co dalej?

Na początku wspomniałem, ze program ma pełnić jakąś funkcję. Na początku niech w ogóle pokaże nam co jest w bazie w jakikolwiek sposób. Posłuży nam do tego kontrolka DataGrid.

Dodajmy ją w pliku XAML:

<DataGrid Name="PokazTuDane"></DataGrid>

Dodajmy zmienna przechowującą nasze zapytanie, tak by łatwiej było można je edytować, zmieniać.

string ZapytanieSQL = "select * from uzytkownik;";

Następnie stwórzmy nasz Adapter do połączenia oraz w kolejnej linijce wybierzmy dla niego komendę do wykonania


                MySqlDataAdapter AdapterSQL = new MySqlDataAdapter();
                AdapterSQL.SelectCommand = new MySqlCommand(ZapytanieSQL, Polaczenie);
                MySqlCommandBuilder builder = new MySqlCommandBuilder(AdapterSQL);

Stwórzmy obiekt przechowujący nasze dane w formie tabeli. Ten nasz nazywa się po prostu dane.


         DataTable dane = new DataTable();

Wypełnijmy nim nasz adapter


         AdapterSQL.Fill(dane);

I uzupełnijmy naszą kontrolkę DataGrid o nazwieTuPokazDane naszymi danymi


                PokazTuDane.ItemsSource = dane.DefaultView;

Na koniec odświeżmy nasz adapter, aby pokazać dane


                AdapterSQL.Update(dane);

Skompilujmy program i zobaczmy go w działaniu

Nie martwicie się, dla testów cała baza jest chaotycznie uzupełniona, tak by sprawdzić działanie samego kodu i nie ingerować w już istniejące dane.

W przypadku złego wypełnienia danych naszej bazy ujrzymy odpowiedni błąd

Całość kodu odpowiedzialnego za działania wygląda tak:

Program działa. Jak widać designersko nie jest piękny, ale działa i to dokładnie chciałem osiągnąć. Czy w sposób właściwy? Zapewne da się to wykonać lepiej/gorzej, bardziej „właściwie”, lecz ja dopiero to „gryzę” i myślę, że to i tak wielkie osiągnięcie, które notabene wywołało uśmiech na mojej twarzy. Czy było trudno? Nie, na pewno warto!

PS: Chciałbym podziękować dla djfoxera za to, że po prostu jest, mimo tego, że troszkę daleko to jednak tak dobrych znajomych nie ma wielu, zwłaszcza pokazujących jak z niczego zrobić "coś" jak jego ostatnia aplikacja. Kolejne podziękowania dla mordzia za to, ze mnie zawsze wypycha do działania :) oraz alucosoftware za pomoc w dawnych czasach (mam nadzieję, że pamiętasz o co chodzi ;)) oraz jego charakter - człowieka, który pomaga z chęcią i robi to co lubi robić, a nie "by" robić.

Oczywiście każdy ma własne zdanie dotyczące danych kwestii nie zamierzam go w żaden sposób podważać, czy obrażać kogokolwiek w jakikolwiek sposób. Przepraszam także za ewentualne błędy.  

windows programowanie hobby

Komentarze