blog | V.Jirovský

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?

  1. 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í.

  2. Úpravou SQLiteConnection konstruktorů – nahradit všechny výskyty open_v2 za funkci open16.

Zdroje:

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

Kategorie: Programování, Windows 8

Tagy: , , , ,