Použití SQLite ve WinRT

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ř.:

1
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 kostruktorech SQLiteConnection všechny výskyty open_v2 za funkci open16.

Zdroje:

Detaily k tomuto problému a další informace najdete na:

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy