SQLite - utrata danych przy INSERT/UPDATE po restarcie aplikacji

1

Witam,

Tworzę aplikację w Windows Phone 8.1. Kiedy robię update na bazie SQLite:

using(SQLiteConnection conn = new SQLiteConnection(DB_PATH))
{ 
    var query = conn.Table<kursy>().Where(k => k.kurs == kursStaryRubel).SingleOrDefault(); 
    query.data = kursAktualnyData;
    query.kurs = kursAktualnyRubel; 
    conn.Update(query);
}

Wszystko działa poprawnie. Mogę zrobić SELECT'a i widać, że dane zostały zaktualizowane. Jednak problem pojawia się, gdy wyłączę i raz jeszcze włączę aplikację. Gdy sprawdzam dane, to mają one wartości sprzed zmiany. Czyli po restarcie aplikacji UPDATE zostaje zapominane.

Dodam, że używam ciągle tej samej bazy, nie jest ona tworzona przy każdym uruchomieniu na nowo. Baza została stworzona tylko za pierwszym razem - gdy jeszcze jej nie było.

Mój DB_PATH to:

public static string DB_PATH = Path.Combine(ApplicationData.Current.LocalFolder.Path, "testowa3.db");

Dlaczego tak się dzieje? Mam wrażenie, że zmiany zostają zatwierdzone ale gdzieś w lokalnej pamięci telefonu tylko lub coś takiego. Nie mogłem znaleźć nigdzie konkretnego rozwiązania na mój problem.

0

Strzelam - wykonaj conn.Commit(); po wykonaniu aktualizacji.

0
Ktos napisał(a):

Strzelam - wykonaj conn.Commit(); po wykonaniu aktualizacji.

Zrobiłem to w transakcji i zakończyłem Commitem, lecz dalej bez zmian. Po restarcie aplikacji baza posiada stare wartości.

1

nie zastępujesz pliku z bazą na starcie?

0
abrakadaber napisał(a):

nie zastępujesz pliku z bazą na starcie?

No właśnie nie zastępuję. Na starcie sprawdzam czy baza o takiej ścieżce i nazwie jak DB_PATH istnieje i jeśli istnieje to nic nie robię, tylko na niej operuję później. No i baza normalnie istnieje przy uruchamianiu aplikacji. Mimo że problem wskazuje właśnie na coś takiego jak mówisz, lecz baza się nie nadpisuje w żaden sposób.

0

A uruchamiasz to przez VS? Bo jeśli plik bazy masz dodany do projektu i ustawione Copy always to będzie właśnie taki efekt.

0

Bez znaczenia czy uruchamiam przez VS czy normalnie z telefonu - baza zachowuje się tak samo. Plik bazy, który mam dodany do projektu ma ustawioną właściwość na Copy if newer. Ale nawet jeśli byłoby Copy always to przecież mój connection string do bazy nie jest ustawiony na tą bazę z projektu tylko na bazę, która istnieje już w telefonie.

DB_PATH zwraca: D:\WPSystem\AppData\Local\Packages\ec79a713-b7bd-43b5-b835-7d9762af7b70_2x6xnakxxxxxx\LocalState\testowa3.db, a więc dostęp do danych bezpośrednio w telefonie.

0
abrakadaber napisał(a):

nie zastępujesz pliku z bazą na starcie?

Jednak nieświadomie baza była zastępowana na starcie, gdyż problemem było to, że bazę tworzyłem w Storage, a nie IsolatedStorage. Nie wiem czy dobrze rozumiem, ale gdy tworzone było to w Storage, to baza była tworzona w pamięci aplikacji, czyli po wyłączeniu aplikacji baza również wygasała. Natomiast gdy bazę utworzyłem w przestrzeni IsolatedStorage to była ona trwale umieszczona w pamięci telefonu. I wtedy nawet w przypadku wyłączenia aplikacji, baza pozostawała, ponieważ została stworzona w pamięci telefonu, a nie w pamięci aplikacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1