logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[c#] Jak stworzyć aplikację C# z bazą danych MySQL online i offline?

Przemek89k 02 Lis 2011 12:49 2615 2
REKLAMA
  • #1 10092297
    Przemek89k
    Poziom 14  
    Posty: 182
    Ocena: 13
    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 :)
  • REKLAMA
  • #2 10092613
    wiesniak
    Poziom 31  
    Posty: 1006
    Pomógł: 231
    Ocena: 52
    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).
  • #3 10096860
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    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ąć.
REKLAMA