Pertanyaan Tidak dapat mengambil data dari SQLite DB di SD Card pada WP8


Saya telah membuat SQLite DB menggunakan System.Data.SQLite di aplikasi konsol. Saya kemudian memindahkan ini ke kartu SD Windows Phone.

Saya mengikuti petunjuk ini untuk menambahkan dukungan SQLite ke aplikasi WP8 saya: https://github.com/peterhuene/sqlite-net-wp8

Saya menemukan file DB dan membukanya seperti ini:

ExternalStorageFile file = null;    
IEnumerable<ExternalStorageDevice> storageDevices = await ExternalStorage.GetExternalStorageDevicesAsync();
    foreach (ExternalStorageDevice storageDevice in storageDevices)
    {
        try
        {
            file = await storageDevice.GetFileAsync("northisland.nztopomap");
        }
        catch
        {
            file = null;
        }
        if (file != null) break;
    }

    SQLiteConnection conn = new SQLiteConnection("Data Source=" + file.Path + ";Version=3;Read Only=True;FailIfMissing=True;");

    SQLiteCommand command = new SQLiteCommand(_dbNorthIsland);
    command.CommandText = "SELECT COUNT(*) FROM tiles";
    int count = (int)command.ExecuteScalar<int>();

Ini menghasilkan kesalahan berikut:

{SQLite.SQLiteException: no such table: tiles
   at SQLite.SQLite3.Prepare2(Database db, String query)
   at SQLite.SQLiteCommand.Prepare()
   at SQLite.SQLiteCommand.ExecuteScalar[T]()}

Menariknya, saya juga mencoba pernyataan SQL berikut:

"SELECT COUNT(*) FROM sqlite_master WHERE type='table'"

Yang memberikan hasil 0 menunjukkan tabel "ubin" saya tidak dapat ditemukan?

Saya menduga bahwa ExternalStorageFile.Path mengembalikan jalur yang tidak dapat diselesaikan oleh SQLite sebagai file yang sudah ada, menuntunnya untuk membuat database baru dan mengeluhkan tentang tabel yang hilang ketika saya mencoba untuk mengaksesnya.

Artikel Microsoft ini tampaknya menyarankan bahwa saya harus dapat mengakses file dari kartu SD dari aplikasi saya: http://msdn.microsoft.com/library/windowsphone/develop/jj720573%28v=vs.105%29.aspx

Umpan balik yang diberikan oleh Karyawan Microsoft:

Aplikasi Anda tidak memiliki akses langsung ke file di kartu SD. Tidak dapat membukanya secara langsung dengan API sistem file, tetapi harus menggunakan antarmuka ExternalStorageFile dan ExternalStorageFolder dari Windows.Storage. Mengutip dari Membaca dari kartu SD di Windows Phone 8:

Aplikasi Windows Phone dapat membaca jenis file tertentu dari kartu SD menggunakan   API Microsoft.Phone.Storage.

Saya berharap bahwa implementasi SQLite untuk telepon mencoba untuk membuka database menggunakan API file C standar daripada menggunakan objek Storage dan dengan demikian mengharuskan database berada di Xap atau penyimpanan terisolasi dan tidak dapat mengakses database pada kartu SD (ini adalah pasti halnya untuk SQLite untuk aplikasi Windows Store).

Secara teori akan mungkin untuk memperbarui SQLite untuk menggunakan objek Storage, tapi saya menduga itu akan menjadi proyek yang signifikan untuk melakukannya.

Contoh proyek telanjang-tulang:

Saya telah membuat proyek contoh bare-bones yang menyoroti masalah saya, untuk berjaga-jaga jika ada yang ingin melihat dan berpotensi mencoba ide apa pun dengan cepat:

https://skydrive.live.com/?cid=de82af8533ac6d28&id=DE82AF8533AC6D28!242&ithint=file,.zip&authkey=!AF4IwcI0G7bsDFE

Salin file bx24.nztopomap ke root kartu SD Anda untuk menguji.

Umpan balik dari komunitas SDK SQLite:

Rupanya itu harus cukup lurus ke depan untuk menambahkan dukungan ke SQLite SDK untuk seseorang dengan beberapa keterampilan C ++ (milikku sedikit berkarat!):

Balasan: http://www.mail-archive.com/sqlite-users@sqlite.org/msg81059.html http://www.mail-archive.com/sqlite-users@sqlite.org/msg81060.html

Untuk pertanyaan awal saya: http://www.mail-archive.com/sqlite-users@sqlite.org/msg81055.html 

Ada yang tahu pustaka SQLite untuk Windows Phone yang dapat membaca dari kartu SD?


7
2017-12-02 09:03


asal


Jawaban:


Anda tidak memerlukan pustaka untuk akses hanya-baca, Anda hanya perlu mendaftarkan ekstensi file dalam manifes. Itu mungkin terlihat seperti ini:

<Extensions>
   <FileTypeAssociation Name="SQLite"
                        TaskID="_default"
                        NavUriFragment="fileToken=%s">
       <Logos>
           <Logo Size="small" IsRelative="true">...</Logo>
           <Logo Size="medium" IsRelative="true">...</Logo>
           <Logo Size="large" IsRelative="true">...</Logo>
       </Logos>
       <SupportedFileTypes>
         <FileType ContentType="application/sqlite">.sqlite</FileType>
       </SupportedFileTypes>
   </FileTypeAssociation>
</Extensions>

0
2017-12-11 14:11