Usa una base de datos local en Xamarin

Empecé a usar el plugin Xamarin para Visual Studio para crear una aplicación de Android.

Tengo una base de datos SQL local, y quiero llamarla para mostrar datos. No veo cómo puedo hacer esto. ¿Es posible?

Después de pensar que esto era algo trivial, me demostraron que estaba equivocado cuando intenté configurar un proyecto de prueba rápido. Esta publicación contendrá un tutorial completo sobre cómo configurar un DB para una aplicación de Android en Xamarin que será útil como referencia para futuros usuarios de Xamarin.

De un vistazo:

  1. Agrega Sqlite.cs a tu proyecto.
  2. Agregue su archivo de base de datos como un activo.
  3. Establezca su archivo de base de datos para comstackrlo como AndroidAsset.
  4. Copie manualmente el archivo de la base de datos de su apk a otro directorio.
  5. Abra una conexión de base de datos usando Sqlite.SqliteConnection.
  6. Opere en la base de datos usando Sqlite.

Configurar una base de datos local para un proyecto Xamarin Android

1. Agregue Sqlite.cs a su proyecto.

Comience yendo a este repository y descargando Sqlite.cs; esto proporciona la API Sqlite que puede usar para ejecutar consultas en contra de su base de datos. Agregue el archivo a su proyecto como un archivo fuente.

2. Agregue DB como activo.

A continuación, obtenga su base de datos y cópiela en el directorio de activos de su proyecto de Android y luego impórtela en su proyecto para que aparezca debajo de la carpeta de activos dentro de su solución:

enter image description here

Estoy utilizando la muestra de la base de datos Chinook_Sqlite.sqlite renombrada a db.sqlite desde este sitio a lo largo de este ejemplo.

3. Establezca DB para comstackr como AndroidAsset.

Haga clic derecho en el archivo DB y AndroidAsset para crear la acción AndroidAsset . Esto asegurará que esté incluido en el directorio de activos de APK.

enter image description here

4. Copie manualmente DB de su APK.

Como el DB se incluye como un activo (empaquetado dentro del APK), tendrá que extraerlo.

Puedes hacer esto con el siguiente código:

 string dbName = "db.sqlite"; string dbPath = Path.Combine (Android.OS.Environment.ExternalStorageDirectory.ToString (), dbName); // Check if your DB has already been extracted. if (!File.Exists(dbPath)) { using (BinaryReader br = new BinaryReader(Android.App.Application.Context.Assets.Open(dbName))) { using (BinaryWriter bw = new BinaryWriter(new FileStream(dbPath, FileMode.Create))) { byte[] buffer = new byte[2048]; int len = 0; while ((len = br.Read(buffer, 0, buffer.Length)) > 0) { bw.Write (buffer, 0, len); } } } } 

Esto extrae el DB como un archivo binario del APK y lo coloca en la ruta de almacenamiento externo del sistema. Siendo realistas, la base de datos puede ir a donde quieras, acabo de elegir pegarla aquí.

También leí que Android tiene una carpeta de bases de datos que almacenará las bases de datos directamente; No pude hacer que funcione, así que acabo de ejecutar este método de usar una base de datos existente.

5. Abra la conexión de base de datos.

Ahora abra una conexión al DB a través de la clase Sqlite.SqliteConnection:

 using (var conn = new SQLite.SQLiteConnection(dbPath)) { // Do stuff here... } 

6. Operar en DB.

Por último, como Sqlite.net es un ORM, puede operar en la base de datos utilizando sus propios tipos de datos:

 public class Album { [PrimaryKey, AutoIncrement] public int AlbumId { get; set; } public string Title { get; set; } public int ArtistId { get; set; } } // Other code... using (var conn = new SQLite.SQLiteConnection(dbPath)) { var cmd = new SQLite.SQLiteCommand (conn); cmd.CommandText = "select * from Album"; var r = cmd.ExecuteQuery (); Console.Write (r); } 

Resumen

¡Y así es como agregar una base de datos Sqlite existente a su solución Xamarin para Android! Para obtener más información, consulte los ejemplos incluidos con la biblioteca Sqlite.net, sus pruebas unitarias y los ejemplos en la documentación de Xamarin.