我们尝试在Visual Studio中使用Xamarin创建跨平台应用程序。我们需要在我们的Pcl项目中添加对android,ios和windows phone的sqlite支持。我们通过NuGet添加了Sqlite-Net PCL,但没有任何SQLiteDataReader,SQLiteParameter或SQLiteDataAdapter。有没有办法为所有这三个平台创建一个支持mono.data.sqlite的Pcl?
答案 0 :(得分:4)
Xamarin有一个名为Tasky的程序,它使用SQLite和PCL: http://docs.xamarin.com/guides/cross-platform/application_fundamentals/pcl/introduction_to_portable_class_libraries/
这是一篇关于SQLite和PCL的摘录:
可移植类库在它可以支持的.NET功能中受到限制。因为它被编译为在多个平台上运行,所以它无法使用SQLite-NET中使用的[DllImport]功能。而SQLite-NET实现为抽象类,然后通过其余的共享代码引用。摘要API的摘录如下所示:
public abstract class SQLiteConnection : IDisposable {
public string DatabasePath { get; private set; }
public bool TimeExecution { get; set; }
public bool Trace { get; set; }
public SQLiteConnection(string databasePath) {
DatabasePath = databasePath;
}
public abstract int CreateTable<T>();
public abstract SQLiteCommand CreateCommand(string cmdText, params object[] ps);
public abstract int Execute(string query, params object[] args);
public abstract List<T> Query<T>(string query, params object[] args) where T : new();
public abstract TableQuery<T> Table<T>() where T : new();
public abstract T Get<T>(object pk) where T : new();
public bool IsInTransaction { get; protected set; }
public abstract void BeginTransaction();
public abstract void Rollback();
public abstract void Commit();
public abstract void RunInTransaction(Action action);
public abstract int Insert(object obj);
public abstract int Update(object obj);
public abstract int Delete<T>(T obj);
public void Dispose()
{
Close();
}
public abstract void Close();
}
共享代码的其余部分使用抽象类来“存储”和“检索”数据库中的对象。在任何使用此抽象类的应用程序中,我们必须传递一个提供实际数据库功能的完整实现。