Protože ve WinRT není zabudovaná databáze jako SQL CE, jednou z mála použitelných je SQLite. Při použití SQLite s nejrozšířenější knihovnou sqlite-net v WinRT aplikaci v ČR podmínkách můžete narazit.
Proč vlastně? Křestní jména.
Ve Windows 8 Microsoft Account (dříve Windows Live ID) vytváří profil v tvaru %systemdrive%\Users\%Křestní jméno%. WinRT vám nedovolí po vzoru IsolatedStorage ukládat soubory z aplikace (z důvodů bezpečnosti) jinam než do složky %systemdrive%\Users\%username%\AppData\Local\Packages\%app% A sqlite-net má bohůžel problém s přístupem k databázový souborům, které mají v cestě Unicode znaky.
Výsledek je, že nemůžete uložit soubor jinam, než je složka uživatele, ale do složky uživatele se zase nemůže dostat SQLite.
Jak tento deadlock rozseknout?
-
Použitím SQLiteConnection konstruktoru s sqlite flagy, např.:
new SQLite.SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "database.db"), SQLite.SQLiteOpenFlags.Create | SQLite.SQLiteOpenFlags.ReadWrite, true);
Tento konstruktor totiž používá správné funkce na otevírání souborů. Toto řešení funguje bohužel jenom na synchronní připojení.
- Úpravou SQLiteConnection konstruktorů – nahradit všechny výskyty open_v2 za funkci open16.
Detaily k tomuto problému a další informace najdete na:
RT @vaclavjirovsky: Nový článek na blogu: Použití SQLite ve WinRT http://t.co/S67CQoBr //cc: @stepanb
Já nakonec použil tuto: http://code.google.com/p/csharp-sqlite/ zatím funguje 🙂
a není problém se schvalováním ve Storu?