2014-05-22 9 views
5

Staramy się stworzyć aplikację crossową wykorzystującą Xamarin w Visual Studio. W naszym projekcie Pcl musimy dodać obsługę sqlite dla telefonów z Androidem, ios i Windows. Dodaliśmy Sqlite-Net PCL przez NuGet, ale nie było żadnego SQLiteDataReader, SQLiteParameter ani SQLiteDataAdapter. Czy istnieje sposób na utworzenie Pcl z obsługą mono.data.sqlite dla wszystkich trzech platform?Jak utworzyć PCL z obsługą sqlite w aplikacji Xamarin Cross Platform

Odpowiedz

4

Xamarin ma przyzwoitą przykład program o nazwie Tasky który wykorzystuje SQLite i PCL: http://docs.xamarin.com/guides/cross-platform/application_fundamentals/pcl/introduction_to_portable_class_libraries/

Oto fragment odnoszące się do SQLite i PCL:

Portable Class Library jest ograniczona w .NET funkcje, które może obsługiwać. Ponieważ jest skompilowany do uruchamiania na wielu platformach, nie może korzystać z funkcji [DllImport] używanej w SQLite-NET. Zamiast tego SQLite-NET jest zaimplementowana jako klasa abstrakcyjna, a następnie odwoływana przez resztę udostępnionego kodu. Wyciąg z abstrakcyjnej API znajduje się poniżej:

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

} 

Pozostała udostępnionego kodu używa klasy abstrakcyjnej do „sklepu” i „pobierać” obiektów z bazy danych. W każdej aplikacji, która używa tej abstrakcyjnej klasy, musimy przejść kompletną implementację, która zapewnia rzeczywistą funkcjonalność bazy danych.

Powiązane problemy