简体   繁体   中英

Wrong path to SQLiteDB (or copy) on WinPhone. Xamarin.Forms PCL

Have installed NUGet packages for Xamarin.Forms for PCL. I have 4 projects for Droid, iOS, Win 8.1 and WinPhone 8.1. Tried to connect my database, but encountered trouble: my Win and WinPhone projects don`t see it or return me the wrong path. Followed official Xamarin.Forms forum.

Interface:

public interface ISQLite
{
    string GetDatabasePath(string filename);
}

WInPhone Class:

using System.IO;
using Windows.Storage;
using Baumizer.WinPhone;
using Xamarin.Forms;

[assembly: Dependency(typeof(SQLite_WinPhone))]
namespace Baumizer.WinPhone
{
    public class SQLite_WinPhone:ISQLite
{
    public SQLite_WinPhone() { }
    public string GetDatabasePath(string filename)
    {
        return Path.Combine(ApplicationData.Current.LocalFolder.Path, filename);
    }
}}

This class for selecting info:

public class DataBase
{
    SQLiteConnection connection;

    public DataBase()
    {
        connection= new SQLiteConnection(DependencyService.Get<ISQLite>().GetDatabasePath("Database.db"));
    }

    public IEnumerable<Group> GetGroups()
    {
        return connection.Query<Group>("SELECT * FROM [Scedule] WHERE [facultyName] =" + "'" + Data.CurrentFaculty + "'");
    }
}

It works well on Android. On WinPhone I get exception of SQLite - no such table: Scedule . I open the local directory for emulator where db was - 0Kb. I put db to Assets and set BuildInAction to Content . What`s wrong? Need help

On forum find this code, putted to OnLaunched(...) in WinPhone App.cs:

if(await ApplicationData.Current.LocalFolder.GetItemAsync(Data.DataBaseName) == null)
        {
            StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync($"Assets\\{Data.DataBaseName}");
            await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder);
        }

It copies DB if it's not exist, but it is. May be I need to delete DB 0Kb , but I don't know how to do this.

It's work, OnLaunched():

try
        {
            await ApplicationData.Current.LocalFolder.GetItemAsync("Scedule.db");
        }
        catch (System.IO.FileNotFoundException)
        {
            StorageFile databaseFile =
                    await Package.Current.InstalledLocation.GetFileAsync($"Assets\\{"Scedule.db"}");
            await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder);
        }

DB was uncorrectly copied. May be there are any another ways.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM