为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 。怎么了?需要帮助
答案 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);
}
数据库未经正确复制。可能还有其他方法。