C# Zapisywanei stanu aplikacji


(Jarek P) #1

Witam. Piszę program w C#, używam Net.Frameworka 4.0 i MS Visual C# EE.

Program przechowuje kilkaset zmiennych i wszystkie je muszę zapisać, a następnie wczytać.

Wiem że mógłbym użyć streamwritera, ale ta liczba zmiennych...

Znacie jakiś prostszy sposób ? Słyszałem coś o resources, ale nie do końca wiem o co tam chodzi.

Z góry dziękuję za pomoc. :slight_smile:


(Tomek Matz) #2

Skoro jest to kilkaset zmiennych to aż prosi się o użycie bazy danych, ale jeśli koniecznie chcesz to mieć w pliku to użyj "Settings", a nie "Resources". Jednego i drugiego używa się w podobny sposób, ale to właśnie "Settings" służy do tego o czym mówisz, tzn. umożliwia zapisanie stanu aplikacji. Choć muszę przyznać nigdy nie używałem tego z taką liczbą zmiennych.

Tu jest dokładnie opisane jak się tego używa: http://www.codeproject.com/KB/cs/UserSettings.aspx. Jakbyś miał jakieś wątpliwości to pytaj.


(Metka Shadowsong) #3

Serializacja? Poczytaj co to jest :slight_smile:


(Jarek P) #4

Macie racje najlepszym rozwiązaniem jest baza danych... Jaką polecacie ???


(Tomek Matz) #5

Zasadniczo to każda będzie OK. Możesz użyć darmowej i jednocześnie bardzo "lekkiej" bazy danych np. MySQL, albo płatnej, np. MS SQL Server i Oracle (są dostępne ich darmowe wersje do celów developerskich). Oczywiście jest ich o wiele więcej. Ja tu wymieniłem tylko te trzy, z których miałem okazję korzystać. Jak będziesz wybierał bazę danych zwróć uwagę na to, żeby była na tej liście: http://en.wikipedia.org/wiki/ADO.NET#Third-party_data_providers.

Ta aplikacja, którą piszesz będzie uruchamiana na jednym komputerze, czy na kilku? Jeśli na kilku to przy tworzeniu tabel musisz uwzględnić, że dla każdego użytkownika stan aplikacji (wartości zmiennych) mogą być inne. Korzystając z Settings nie musisz się tym przejmować, bo stan aplikacji zapisywany jest w katalogu domowym użytkownika w odpowiednim pliku XML. Ja jednak zalecam użycie bazy danych, bo co jeśli ten plik ulegnie uszkodzeniu? Wpisywanie wartości dla kilkuset zmiennych od nowa to jednak średnia przyjemność. W przypadku bazy danych w wygodny sposób możesz sobie robić back up całej bazy, żeby zabezpieczyć się przed tego typu sytuacją.


(Fiołek) #6

SQL Server Express można wykorzystywać do celów komercyjnych.

Używanie bazy danych do przechowywania ustawień(i tylko ustawień) to przerost formy nad treścią. Ani to wygodne, ani wydajne, dodatkowo bazy nie są do tego przystosowane. Oczywiście można to przechowywać "przy okazji", ale nie w tego typu aplikacjach(gdzie ustawienia są per-user). W ostateczności można wykorzystać SQLite albo SQL Server Compact, ale to nadal mija się z celem. Zwykły plik konfiguracyjny(XML/JSON we własnym zakresie czy wbudowane rozwiązania takie jak, wymienione już, Settings(które to i tak wykorzystuje XML AFAIK)) to rozwiązanie najlepsze i najprostsze. Nie potrzeba konfigurować, nie potrzeba pobierać dodatkowych bibliotek, nie potrzeba bawić się w tabelę - wystarczy zdeserializować plik(przy użyciu Settings nawet tego nie trzeba robić).


(Tomek Matz) #7

Masz rację, nie wiedziałem o tym.


(Jarek P) #8

Program będzie,że tak powiem działał w wielu miejscach na raz... Tak więc każdy musi mieć dostęp do bazy.


(Fiołek) #9

To chcesz zapisać ustawienia(stan) programu(czy to globalne, czy też per-user) czy jego dane, które mogą być zmieniane przez wszystkich?


(Jarek P) #10

Chciałbym, aby każdy mógł stworzyć obiekt i każdy mógł edytować jego referencja i podpiąć to wszystko do bazy.


(Tomek Matz) #11

Czyli każdy użytkownik ma mieć dostęp do identycznych wartości tych kilkuset zmiennych? Jeśli jeden z nich zmieni wartość którejś z tych zmiennych, to ta zmiana ma być widoczna dla wszystkich pozostałych użytkowników?

Jeśli tak to na początku nie do końca Cię zrozumiałem, ale w takiej sytuacji użycie bazy danych jest tym bardziej uzasadnione. Choć pojawia się nowy problem, a mianowicie zapewnienie, że te dane będą zsynchronizowane (nie jest to banalna rzecz).

Możesz też zastanowić się nad tym, czy do tego, co chcesz zrobić najlepszym rozwiązaniem jest aplikacja Windows. Może lepiej napisać aplikację ASP .NET? W takiej sytuacji miałbyś tylko jeden plik konfiguracyjny aplikacji i od razu masz załatwioną sprawę z zapewnieniem bezpiecznego połączenia z bazą danych. Aplikacja jest też wtedy niezależna od tego jaki system operacyjny mają zainstalowany użytkownicy i czy na ich komputerze jest .NET Framework. Ale wtedy też musiałbyś zaimplementować jakieś logowanie, żeby dostęp do aplikacji mieli tylko uprawnieni użytkownicy.


(Jarek P) #12

Chyba jednak zdecyduję się na ASP. A propos dostępu, jest to dziennik wirtualny i każdy nauczyciel powinien mieć możliwość np. dać Frankowi z 3c uwagę :slight_smile:


(Tomek Matz) #13

No to nie ma problemu. Dziennik możesz spokojnie robić jako aplikację ASP .NET. Skoro już mówisz o tych uwagach. Utworzysz sobie textbox, ustawisz mu MultiLine na true, Rows na ile tam będziesz chciał i nauczyciel będzie mógł sobie wpisywać uwagi.

Powodzenia i Pozdrawiam :slight_smile:


(Jarek P) #14

Dzięki wam wszystkim za pomoc i dobre rady. Mam jeszcze jedno pytanko :slight_smile: Znacie jakieś dobre kursy zabawy z SQL ? Wiem że na google jest tego pełno, lae może wy mi coś polecicie ?


(Tomek Matz) #15

Obawiam się, że jakiegoś takiego na prawdę dobrego to nie znam. Jak czasami potrzebuję coś sprawdzić na szybko to wchodzę na tą stronę: http://www.1keydata.com/sql/sql.html.

Sęk w tym, że sam SQL to nie wszystko. Większym problemem dla Ciebie będzie poprawne zaprojektowanie struktury bazy danych. Możesz zerknąć na ten link: http://forum.dobreprogramy.pl/dziennik-lekcyjny-jako-baza-danych-access-t425305.html. Swego czasu omawialiśmy tutaj podobny problem. Ale tylko podobny, bo Twoja baza danych będzie miała bardziej zaawansowaną strukturę.