Błąd z zapamiętaniem danej C# VS

Hej, mam problem - chciałbym aby aplikacja zapamiętała jakiś obiekt np. Dataset, tak żebym miał go w tej samej postaci gdy ponownie uruchomię program - czy to możliwe ?

Próbowałem zrobić to za pomocą :

DataSet nowy = new DataSet();

   Properties.Settings.Default.zapamietaj = nowy;

Gdzie w zakładce Settings ustawiłem typ zmiennej zapamietaj na Dataset, jednak po skompilowaniu wywala mi błąd :

‘The invocation of the constructor on type ‘Bleble.MainWindow’ that matches the specified binding constraints threw an exception.’ Line number ‘3’ and line position '9

Settings służą do zapamiętywania wartości zmiennych. Ty aktualnie próbujesz zapamiętać referencję do obiektu DataSet, co kompletnie mija się z celem :slight_smile: Poza tym strukturę całego DataSet-a masz przecież zapamiętaną … w kodzie aplikacji.

Ale chciałbym zrobić tak, aby po wypełnieniu Dataset za pomocą Dataadaptera.Fill - mógłbym zachować ten Dataset w pamięci, tak aby w przypadku braku połączenia z internetem użytkownik dysponował jakąś bazą danych (przechowaną np. w dataset).

No przecież on w pamięci (RAM) jest zachowany (a przynajmniej do momentu, w którym użytkownik zamknie aplikację). Stąd właśnie nazwa “disconnected layer”. Jeśli chciałbyś zapamiętać go trwale (na HDD), to musisz użyć lokalnej bazy danych (o czym dyskusja toczyła się w innym temacie).

Czyli muszę najpierw z bazy zewnętrznej pobrać dane do dataset i później z tego datasetu znowu przerzucić dane do bazy lokalnej … ?? Czy ten sam Dataset to obsłuży - nie ma szybszego sposobu … ?

A i jeszcze jedno pytanie o zakładkę Properties - są tam właściwości obiektu, jak mogę dodać własną właściwość tak aby była ona widoczna w tym oknie ?

  1. Gotowego rozwiązania Ci nie podam, bo jak już pisałem, ja aplikacji tego typu nigdy nie robiłem. Najszybszym sposobem będzie ten Sync Framework (a przynajmniej tak mi się wydaje), o którym ostatnio pisałem. Obejrzałeś ten filmik, do którego dałem link?

  2. Okienko Properties wyświetla publiczne właściwości danej kontrolki. Jeśli chcesz mieć tam jakąś własną właściwość, to musisz napisać własną implementację danej kontrolki, np. MyDataSet : DataSet, czyli kontrolka MyDataSet dziedziczy po kontrolce DataSet i w obrębie klasy MyDataSet implementujesz własną publiczną właściwość.

Taa… :wink:

Zamiast kombinować z Settings aplikacji możesz zapisać DataSet do pliku przy użyciu metody WriteXml, a potem wczytać używając ReadXml.

?

I zawsze ma trzymać całą lokalną bazę danych w pamięci? Niby przy niedużej (pytanie ile to znaczy nieduża, wiesz jakimi komputerami tam dysponują?) bazie danych jest to możliwe, ale co jak się rozrośnie?

Matzu - ale writexml i readxml zapisuje mi chyba do pliku - czy dobrze rozumię ( i w tym przypadku ta wartość nie jest trzymana w pamięci)…

Dodane 09.12.2011 (Pt) 11:20

A nie zapamiętam w ten sposób tylko struktury Datasetu …? Chciałbym zapamiętać także dane - tzn wypełnię adapterem Dataset, zapiszę go :

dataset1.WriteXml(“XML/MyData.xml”, XmlWriteMode.WriteSchema);

i czy przy odczycie :

ds.ReadXml(“XML/MyData.xml”, XmlReadMode.ReadSchema);

dostanę później Dataset razem z danymi - czy tylko taką samą strukturą …?

@desperado

Tak, zapisuje do pliku, czyli nie jest przechowywane w pamięci, ale jak już będziesz to wczytywał, to wczytasz całość, a nie wybrane dane (czyli załadujesz do pamięci całą bazę danych). Chyba, że jest możliwość wczytywania wybranych danych (i później aktualizowania wybranych danych) - szczerze to nie wiem (tutaj musisz poczekać na odpowiedź somekind)? Jeśli jest, to wówczas od razu pojawia się pytanie, czy przeszukiwanie pliku XML jest wydajniejsze od przeszukiwania bazy danych? W każdym bądź razie … ogólnie to dziwię się, że tak szybko zmieniłeś założenia projektu. Z lokalnej bazy danych na pliki XML to spory przeskok :slight_smile:

Wbrew temu co napisałeś, nie ma obowiązku przechowywania danych w bazach, szczególnie jeśli są one w obiekcie typu DataSet. :slight_smile:

To chyba nie do mnie pytania, ja nie wiem co chce zrobić autor wątku. :slight_smile:

Z pierwszego postu zrozumiałem, że jest potrzeba szybkiego zapisania danych z DataSetu na lokalnej maszynie, więc podsunąłem znane mi rozwiązanie. Sprawdzi się dla “małej” porcji danych. Nie wiem co to za aplikacja i co ma robić, czemu dane są w dwóch miejscach, więc nie umiem poradzić nic więcej.

Będzie baza danych online i offline (chcę aby użytkownik, przy braku internetu miał w zanadrzu dane, które uprzednio pobrał z bazy online).

No to nie wiem, po co w tej sytuacji dodawać jakieś Settingsy czy pliki XML.