web-dev-qa-db-fra.com

Utiliser une base de données locale dans Xamarin

J'ai commencé à utiliser le plugin Xamarin pour Visual Studio pour créer une application Android.

J'ai une base de données SQL locale et je veux l'appeler pour afficher des données. Je ne vois pas comment je peux faire ça. C'est possible?

39
user2631662

Après avoir pensé que c'était une chose triviale à faire, je me suis trompé lorsque j'ai essayé de configurer un projet de test rapide. Cette publication contiendra un tutoriel complet sur la configuration d'une base de données pour une application Android dans Xamarin qui sera utile comme référence pour les futurs utilisateurs de Xamarin.

En bref:

  1. Ajoutez Sqlite.cs à votre projet.
  2. Ajoutez votre fichier de base de données en tant qu'actif.
  3. Définissez votre fichier de base de données pour créer un AndroidAsset.
  4. Copiez manuellement le fichier de base de données de votre apk vers un autre répertoire.
  5. Ouvrez une connexion à une base de données à l'aide de Sqlite.SqliteConnection.
  6. Opérez sur la base de données à l'aide de Sqlite.

Configuration d'une base de données locale pour un projet Xamarin Android project

1. Ajoutez Sqlite.cs à votre projet.

Commencez par aller à ce référentiel et téléchargez Sqlite.cs; cela fournit l'API Sqlite que vous pouvez utiliser pour exécuter des requêtes sur votre base de données. Ajoutez le fichier à votre projet en tant que fichier source.

2. Ajoutez DB comme ressource.

Ensuite, récupérez votre base de données et copiez-la dans le répertoire Assets de votre Android projet, puis importez-la dans votre projet afin qu'elle apparaisse sous les Assets dossier dans votre solution:

enter image description here

J'utilise l'exemple de base de données Chinook_Sqlite.sqlite renommé en db.sqlite à partir de ce site tout au long de cet exemple.

3. Définissez DB pour créer en tant qu'AndroidAsset.

Cliquez avec le bouton droit sur le fichier DB et définissez-le pour générer l'action AndroidAsset. Cela garantira qu'il est inclus dans le répertoire des ressources de l'APK.

enter image description here

4. Copiez manuellement DB hors de votre APK.

Comme la base de données est incluse en tant qu'actif (inclus dans l'APK), vous devrez l'extraire.

Vous pouvez le faire avec le code suivant:

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

Cela extrait la base de données sous forme de fichier binaire de l'APK et la place dans le chemin de stockage externe du système. De façon réaliste, la DB peut aller où vous voulez, je viens de choisir de la coller ici.

J'ai également lu que Android a un dossier de bases de données qui stockera directement les bases de données; je ne pouvais pas le faire fonctionner, donc je viens de courir avec cette méthode d'utilisation d'une base de données existante.

5. Ouvrez DB Connection.

Ouvrez maintenant une connexion à la base de données via la classe Sqlite.SqliteConnection:

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

6. Opérez sur DB.

Enfin, Sqlite.net étant un ORM, vous pouvez opérer sur la base de données en utilisant vos propres types de données:

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

    Console.Write (r);
}

Sommaire

Et voilà comment ajouter une base de données Sqlite existante à votre solution Xamarin pour Android! Pour plus d'informations, consultez les exemples inclus avec la bibliothèque Sqlite.net, ses tests unitaires et les exemples dans la documentation Xamarin.

63
matthewrdev

Voici celui que j'utilise et ça marche

  • installer le plugin Sqlite
  • créer une interface pour accéder aux différentes plateformes de services
  • créer un modèle pour la table
  • implémenter l'interface que vous avez créée précédemment sur toute la plateforme que vous souhaitez utiliser
  • utilisez le plugin pour créer, obtenir, insérer, etc. sur votre table

pour des informations plus détaillées, consultez this

1
Xamassassin