在WinPhone上错误的SQLiteDB(或复制)路径。 Xamarin.Forms PCL

时间:2016-09-22 10:45:54

标签: c# .net sqlite xamarin xamarin.forms

为PCL安装了Xamarin.Forms的NUGet包。我有4个项目用于Droid,iOS,Win 8.1和WinPhone 8.1。试图连接我的数据库,但遇到了麻烦:我的Win和WinPhone项目没有看到它或给我错误的路径。关注官方Xamarin.Forms论坛。

接口:

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

WInPhone类:

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);
    }
}}

此课程用于选择信息:

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 + "'");
    }
}

在Android上运行良好。在WinPhone上我得到了SQLite的例外 - 没有这样的表:Scedule 。我打开模拟器的本地目录,其中db是 - 0Kb。 我将db放到 Assets 并将 BuildInAction 设置为 Content 。怎么了?需要帮助

1 个答案:

答案 0 :(得分:0)

在论坛上找到这个代码,推送到WinPhone App.cs中的 OnLaunched(...)

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);
        }

如果数据库不存在,它会复制数据库,但它确实存在。可能我需要删除DB 0Kb ,但我不知道该怎么做。

它的工作,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);
        }

数据库未经正确复制。可能还有其他方法。