Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[c#] Program bazodanowy - jak ?

Przemek89k 02 Lis 2011 12:49 1943 2
  • #1 02 Lis 2011 12:49
    Przemek89k
    Poziom 14  

    Hej,
    Chciałbym w Visual Studio C# zrobić program, który będzie przechowywał informacje w bazie danych - będą dwie tabele pracownicy i zlecenia.
    Będzie kilka aplikacji klienckich, które będą łączyły się z bazą danych online i z nich pobierały "świeże" informacje - programy te także mogą modyfikować bazę danych.
    W przypadku braku połączenia z bazą danych, chciałbym aby programy te pracowały offline na bazie danych, którą wcześniej importowały online (gdy był dostęp do internetu).

    A więc program ma mieć możliwość łączenia z bazą danych MYSQL online, a także przechowywać tą bazę offline - chciałbym zapytać jak takie coś zrobić ?

    Posiadam serwer MYSQL z którym można łączyć się zewnętrznie (nie trzeba wykorzystywać wyłącznie localhost) - i chciałbym stworzyć w nim te dwie tabele, czy muszę to robić ręcznie za pomocą zapytań SQL i wydawać taką komendę w programie ? Będzie ona przecież trochę długa ....
    Rozumiem, że można to zrobić w PHPMyAdmin bezpośrednio na stronie - ale w przypadku gdy użytkownik, będzie chciał zmienić bazę danych na inną, gdzie nie ma tej struktury bazy danych - to wolę takie coś zaimplementować w programie - aby automatycznie tworzył bazę danych - jak to zrobić ?

    Druga sprawa - w jaki sposób przechowywać bazę danych offline, pracować na niej i aktualizować te zmiany w przypadku gdy będzie połączenie z internetem ?

    Posiadam program Power Designer i w nim mogę utworzyć tabele i relacje pomiędzy nimi - ale jak wygenerować z tego bazę danych i używać jej w programie ?

    Podkreślam, że chciałbym online pracować na bazie danych mysql (gdyż taki mam darmowy serwer z dostępem zewnętrznym).

    Dzięki za pomoc :)

    0 2
  • #2 02 Lis 2011 14:54
    wiesniak
    Poziom 31  

    Moim zdaniem powinieneś zrobić sobie skrypt SQL, który będzie Ci tworzył początkową strukturę bazy - dodawanie instalatora bazy w programie użytkowym nie jest raczej dobrym pomysłem.
    Bazę możesz zasymulować za pomocą statycznej klasy ze statycznymi kolekcjami. Jedna kolekcja odpowiada jednej tabeli.
    Problem będzie z tą bazą offline. Musiałbyś napisać mechanizmy operacji na bazie, które wołane z aplikacji będą w rzeczywistości operować na tej bazie w aplikacji. Dopiero "pod spodem" musiałbyś zrobić mechanizmy synchronizujące z rzeczywistą bazą mysql. Ogólnie chodzi o to, by sterowanie od użytkownika nie było świadome pośrednictwa. To jeszcze jest do zrobienia. IMO największym zmartwieniem i problemem będzie synchronizacja, bo będziesz musiał a) pamiętać (oznaczać) dane, które zostały zmodyfikowane oraz obsługiwać konkurencję przy modyfikacjach albo odświeżaniu lokalnej bazy. Da się zrobić, ale trochę zabawy przed Tobą.

    Aha, samo połączenie do bazy możesz zrobić na kilka sposobów, np. tradycyjnie za pomocą SqlCommand albo z użyciem Entity Framework (potrzebny będzie jakiś dodatek do obsługi mysql w EF, np http://stackoverflow.com/questions/76488/using-mysql-with-entity-framework)..

    0
  • #3 03 Lis 2011 17:59
    marcinj12
    Poziom 40  

    W C# możesz utworzyć obiekt DataSet, a w nim odwzorować tabele i relacje między nimi. Umożliwia on pracę również w tzw. "trybie rozłączonym" (disconnected mode). W skrócie: po połączeniu danych baza jest pobierana do tabel obiektu dataset, w tym momencie można przejść offline, pracować i modyfikować "kopię" bazy w pamięci, a po przejściu online i wykonaniu procedury "update" dataset automatycznie naniesie zmiany na oryginalną bazę.
    Przyznam, że sam nigdy z tego trybu nie korzystałem, bo sama idea pracy wielu klientów w odłączeniu od bazy jakoś do mnie nie przemawia, niemniej myślę że warto to sprawdzić. Tutaj możesz zacząć.

    0