Almacenar datos en una base de datos de SQLite.NET localStore Data in a Local SQLite.NET Database

Descargar ejemplo Descargar el ejemploDownload Sample Download the sample

En esta guía de inicio rápido, obtendrá información sobre cómo:In this quickstart, you will learn how to:

  • Use el administrador de paquetes de NuGet para agregar un paquete de NuGet a un proyecto.Use the NuGet Package Manager to add a NuGet package to a project.
  • Almacenar datos localmente en una base de datos de SQLite.NET.Store data locally in a SQLite.NET database.

En la guía de inicio rápido se explica cómo almacenar datos en una base de datos de SQLite.NET local.The quickstart walks through how to store data in a local SQLite.NET database. A continuación se muestra la aplicación final:The final application is shown below:

[ ![(database-images/screenshots1-sml.png " ")]Página notas] (database-images/screenshots1.png#lightbox "Página notas") Nota: Página de(database-images/screenshots2.png#lightbox "entrada de nota") de página [ ![(database-images/screenshots2-sml.png " ")]]

Requisitos previosPrerequisites

Antes de intentar esta guía de inicio rápido, debe completar correctamente el Inicio rápido anterior .You should successfully complete the previous quickstart before attempting this quickstart. También puede descargar el ejemplo de inicio rápido anterior y usarlo como punto de partida para esta guía de inicio rápido.Alternatively, download the previous quickstart sample and use it as the starting point for this quickstart.

Actualizar la aplicación con Visual StudioUpdate the app with Visual Studio

  1. Inicie Visual Studio y abra la solución notas.Launch Visual Studio and open the Notes solution.

  2. En Explorador de soluciones, seleccione el proyecto notas , haga clic con el botón derecho y seleccione administrar paquetes NuGet.. .:In Solution Explorer, select the Notes project, right-click and select Manage NuGet Packages...:

  3. En el Administrador de paquetes NuGet, seleccione la pestaña Examinar, busque el paquete NuGet sqlite-net-pcl, selecciónelo y haga clic en el botón Instalar para agregarlo al proyecto:In the NuGet Package Manager, select the Browse tab, search for the sqlite-net-pcl NuGet package, select it, and click the Install button to add it to the project:

    Nota

    Hay varios paquetes NuGet con nombres similares.There are a number of NuGet packages with similar names. El paquete correcto tiene estos atributos:The correct package has these attributes:

    • Autores: Frank A. KruegerAuthor(s): Frank A. Krueger
    • Id.: sqlite-net-pclId: sqlite-net-pcl
    • Vínculo de NuGet: sqlite-net-pclNuGet link: sqlite-net-pcl

    A pesar del nombre del paquete, este paquete NuGet puede usarse en proyectos de .NET Standard.Despite the package name, this NuGet package can be used in .NET Standard projects.

    Este paquete se usará para incorporar operaciones de bases de datos en la aplicación.This package will be used to incorporate database operations into the application.

  4. En Explorador de soluciones, en el proyecto notas , Abra Note.CS en la carpeta modelos y reemplace el código existente por el código siguiente:In Solution Explorer, in the Notes project, open Note.cs in the Models folder and replace the existing code with the following code:

    using System;
    using SQLite;
    
    namespace Notes.Models
    {
        public class Note
        {
            [PrimaryKey, AutoIncrement]
            public int ID { get; set; }
            public string Text { get; set; }
            public DateTime Date { get; set; }
        }
    }
    

    Esta clase define un Note modelo que almacenará los datos de cada nota en la aplicación.This class defines a Note model that will store data about each note in the application. La ID propiedad se marca con PrimaryKey los AutoIncrement atributos y para asegurarse de Note que cada instancia de la base de datos SQLite.net tendrá un identificador único proporcionado por SQLite.net.The ID property is marked with PrimaryKey and AutoIncrement attributes to ensure that each Note instance in the SQLite.NET database will have a unique id provided by SQLite.NET.

    Guarde los cambios en Note.CS presionando Ctrl + Sy cierre el archivo.Save the changes to Note.cs by pressing CTRL+S, and close the file.

    Advertencia

    Si intenta compilar la aplicación en este momento, se producirán errores que se corregirán en los pasos siguientes.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  5. En Explorador de soluciones, agregue una nueva carpeta denominada Data al proyecto Notes .In Solution Explorer, add a new folder named Data to the Notes project.

  6. En Explorador de soluciones, en el proyecto notas , agregue una nueva clase denominada NoteDatabase a la carpeta de datos .In Solution Explorer, in the Notes project, add a new class named NoteDatabase to the Data folder.

  7. En NoteDatabase.CS, reemplace el código existente por el código siguiente:In NoteDatabase.cs, replace the existing code with the following code:

    using System.Collections.Generic;
    using System.Threading.Tasks;
    using SQLite;
    using Notes.Models;
    
    namespace Notes.Data
    {
        public class NoteDatabase
        {
            readonly SQLiteAsyncConnection _database;
    
            public NoteDatabase(string dbPath)
            {
                _database = new SQLiteAsyncConnection(dbPath);
                _database.CreateTableAsync<Note>().Wait();
            }
    
            public Task<List<Note>> GetNotesAsync()
            {
                return _database.Table<Note>().ToListAsync();
            }
    
            public Task<Note> GetNoteAsync(int id)
            {
                return _database.Table<Note>()
                                .Where(i => i.ID == id)
                                .FirstOrDefaultAsync();
            }
    
            public Task<int> SaveNoteAsync(Note note)
            {
                if (note.ID != 0)
                {
                    return _database.UpdateAsync(note);
                }
                else
                {
                    return _database.InsertAsync(note);
                }
            }
    
            public Task<int> DeleteNoteAsync(Note note)
            {
                return _database.DeleteAsync(note);
            }
        }
    }
    

    Esta clase contiene código para crear la base de datos, leer datos de ella, escribir datos en ella y eliminar datos de la misma.This class contains code to create the database, read data from it, write data to it, and delete data from it. El código usa API asincrónicas de SQLite.NET que mueven las operaciones de base de datos a subprocesos en segundo plano.The code uses asynchronous SQLite.NET APIs that move database operations to background threads. Además, el constructor NoteDatabase toma la ruta de acceso del archivo de base de datos como un argumento.In addition, the NoteDatabase constructor takes the path of the database file as an argument. La App clase proporcionará esta ruta de acceso en el paso siguiente.This path will be provided by the App class in the next step.

    Guarde los cambios en NoteDatabase.CS presionando Ctrl + Sy cierre el archivo.Save the changes to NoteDatabase.cs by pressing CTRL+S, and close the file.

    Advertencia

    Si intenta compilar la aplicación en este momento, se producirán errores que se corregirán en los pasos siguientes.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  8. En Explorador de soluciones, en el proyecto notas , haga doble clic en app.Xaml.CS para abrirlo.In Solution Explorer, in the Notes project, double-click App.xaml.cs to open it. A continuación, reemplace el código existente por el código siguiente:Then replace the existing code with the following code:

    using System;
    using System.IO;
    using Xamarin.Forms;
    using Notes.Data;
    
    namespace Notes
    {
        public partial class App : Application
        {
            static NoteDatabase database;
    
            public static NoteDatabase Database
            {
                get
                {
                    if (database == null)
                    {
                        database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes.db3"));
                    }
                    return database;
                }
            }
    
            public App()
            {
                InitializeComponent();
                MainPage = new NavigationPage(new NotesPage());
            }
    
            protected override void OnStart()
            {
                // Handle when your app starts
            }
    
            protected override void OnSleep()
            {
                // Handle when your app sleeps
            }
    
            protected override void OnResume()
            {
                // Handle when your app resumes
            }
        }
    }
    

    Este código define una Database propiedad que crea una nueva NoteDatabase instancia como singleton, pasando el nombre de archivo de la base de datos NoteDatabase como argumento al constructor.This code defines a Database property that creates a new NoteDatabase instance as a singleton, passing in the filename of the database as the argument to the NoteDatabase constructor. La ventaja de exponer la base de datos como un singleton es que se crea una conexión de base de datos única que se mantiene abierta mientras la aplicación se ejecuta, lo que evita el gasto de abrir y cerrar el archivo de base de datos cada vez que se realiza una operación de base de datos.The advantage of exposing the database as a singleton is that a single database connection is created that's kept open while the application runs, therefore avoiding the expense of opening and closing the database file each time a database operation is performed.

    Guarde los cambios en App.xaml.cs presionando CTRL+S y cierre el archivo.Save the changes to App.xaml.cs by pressing CTRL+S, and close the file.

    Advertencia

    Si intenta compilar la aplicación en este momento, se producirán errores que se corregirán en los pasos siguientes.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  9. En Explorador de soluciones, en el proyecto notas , haga doble clic en NotesPage.Xaml.CS para abrirlo.In Solution Explorer, in the Notes project, double-click NotesPage.xaml.cs to open it. A continuación, OnAppearing Reemplace el método por el código siguiente:Then replace the OnAppearing method with the following code:

    protected override async void OnAppearing()
    {
        base.OnAppearing();
    
        listView.ItemsSource = await App.Database.GetNotesAsync();
    }
    

    Este código rellena el ListView con cualquier nota almacenada en la base de datos.This code populates the ListView with any notes stored in the database.

    Guarde los cambios en NotesPage.Xaml.CS presionando Ctrl + Sy cierre el archivo.Save the changes to NotesPage.xaml.cs by pressing CTRL+S, and close the file.

    Advertencia

    Si intenta compilar la aplicación en este momento, se producirán errores que se corregirán en los pasos siguientes.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  10. En Explorador de soluciones, haga doble clic en NoteEntryPage.Xaml.CS para abrirlo.In Solution Explorer, double-click NoteEntryPage.xaml.cs to open it. A continuación, OnSaveButtonClicked Reemplace OnDeleteButtonClicked los métodos y por el código siguiente:Then replace the OnSaveButtonClicked and OnDeleteButtonClicked methods with the following code:

    async void OnSaveButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        note.Date = DateTime.UtcNow;
        await App.Database.SaveNoteAsync(note);
        await Navigation.PopAsync();
    }
    
    async void OnDeleteButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        await App.Database.DeleteNoteAsync(note);
        await Navigation.PopAsync();
    }
    

    Almacena una Note instancia de, que representa una sola nota, en la BindingContext de la página. NoteEntryPageThe NoteEntryPage stores a Note instance, which represents a single note, in the BindingContext of the page. Cuando se OnSaveButtonClicked ejecuta el controlador de eventos, Note la instancia se guarda en la base de datos y la aplicación se desplaza a la página anterior.When the OnSaveButtonClicked event handler is executed, the Note instance is saved to the database and the application navigates back to the previous page. Cuando se OnDeleteButtonClicked ejecuta el controlador de eventos, Note la instancia se elimina de la base de datos y la aplicación se desplaza a la página anterior.When the OnDeleteButtonClicked event handler is executed, the Note instance is deleted from the database and the application navigates back to the previous page.

    Guarde los cambios en NoteEntryPage.Xaml.CS presionando Ctrl + Sy cierre el archivo.Save the changes to NoteEntryPage.xaml.cs by pressing CTRL+S, and close the file.

  11. Compile y ejecute el proyecto en cada plataforma.Build and run the project on each platform. Para obtener más información, vea crear la guía de inicio rápido.For more information, see Building the quickstart.

    En el NotesPage , presione + el botón para navegar hasta el NoteEntryPage y escriba una nota.On the NotesPage press the + button to navigate to the NoteEntryPage and enter a note. Después de guardar la nota, la aplicación se devolverá a la NotesPage.After saving the note the application will navigate back to the NotesPage.

    Escriba un número de notas, de longitud variable, para observar el comportamiento de la aplicación.Enter a number of notes, of varying length, to observe the application behavior.

Actualizar la aplicación con Visual Studio para MacUpdate the app with Visual Studio for Mac

  1. Inicie Visual Studio para Mac y abra el proyecto de notas.Launch Visual Studio for Mac and open the Notes project.

  2. En el Panel de solución, seleccione el proyecto notas , haga clic con el botón derecho y seleccione Agregar > agregar paquetes NuGet. ..:In the Solution Pad, select the Notes project, right-click and select Add > Add NuGet Packages...:

  3. En la ventana Agregar paquetes, busque el paquete NuGet sqlite-net-pcl, selecciónelo y haga clic en el botón Agregar paquete para agregarlo al proyecto:In the Add Packages window, search for the sqlite-net-pcl NuGet package, select it, and click the Add Package button to add it to the project:

    Nota

    Hay varios paquetes NuGet con nombres similares.There are a number of NuGet packages with similar names. El paquete correcto tiene estos atributos:The correct package has these attributes:

    • Autor: Frank A. KruegerAuthor: Frank A. Krueger
    • Id.: sqlite-net-pclId: sqlite-net-pcl
    • Vínculo de NuGet: sqlite-net-pclNuGet link: sqlite-net-pcl

    A pesar del nombre del paquete, este paquete NuGet puede usarse en proyectos de .NET Standard.Despite the package name, this NuGet package can be used in .NET Standard projects.

    Este paquete se usará para incorporar operaciones de bases de datos en la aplicación.This package will be used to incorporate database operations into the application.

  4. En el Panel de solución, en el proyecto notas , Abra Note.CS en la carpeta modelos y reemplace el código existente por el código siguiente:In the Solution Pad, in the Notes project, open Note.cs in the Models folder and replace the existing code with the following code:

    using System;
    using SQLite;
    
    namespace Notes.Models
    {
        public class Note
        {
            [PrimaryKey, AutoIncrement]
            public int ID { get; set; }
            public string Text { get; set; }
            public DateTime Date { get; set; }
        }
    }
    

    Esta clase define un Note modelo que almacenará los datos de cada nota en la aplicación.This class defines a Note model that will store data about each note in the application. La ID propiedad se marca con PrimaryKey los AutoIncrement atributos y para asegurarse de Note que cada instancia de la base de datos SQLite.net tendrá un identificador único proporcionado por SQLite.net.The ID property is marked with PrimaryKey and AutoIncrement attributes to ensure that each Note instance in the SQLite.NET database will have a unique id provided by SQLite.NET.

    Guarde los cambios en Note.CS eligiendo archivo > Guardar (o presionando ⌘ + S) y cierre el archivo.Save the changes to Note.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    Advertencia

    Si intenta compilar la aplicación en este momento, se producirán errores que se corregirán en los pasos siguientes.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  5. En el Panel de solución, agregue una nueva carpeta denominada Data al proyecto Notes .In the Solution Pad, add a new folder named Data to the Notes project.

  6. En el Panel de solución, en el proyecto notas , agregue una nueva clase denominada NoteDatabase a la carpeta de datos .In the Solution Pad, in the Notes project, add a new class named NoteDatabase to the Data folder.

  7. En NoteDatabase.CS, reemplace el código existente por el código siguiente:In NoteDatabase.cs, replace the existing code with the following code:

    using System.Collections.Generic;
    using System.Threading.Tasks;
    using SQLite;
    using Notes.Models;
    
    namespace Notes.Data
    {
        public class NoteDatabase
        {
            readonly SQLiteAsyncConnection _database;
    
            public NoteDatabase(string dbPath)
            {
                _database = new SQLiteAsyncConnection(dbPath);
                _database.CreateTableAsync<Note>().Wait();
            }
    
            public Task<List<Note>> GetNotesAsync()
            {
                return _database.Table<Note>().ToListAsync();
            }
    
            public Task<Note> GetNoteAsync(int id)
            {
                return _database.Table<Note>()
                                .Where(i => i.ID == id)
                                .FirstOrDefaultAsync();
            }
    
            public Task<int> SaveNoteAsync(Note note)
            {
                if (note.ID != 0)
                {
                    return _database.UpdateAsync(note);
                }
                else
                {
                    return _database.InsertAsync(note);
                }
            }
    
            public Task<int> DeleteNoteAsync(Note note)
            {
                return _database.DeleteAsync(note);
            }
        }
    }
    

    Esta clase contiene código para crear la base de datos, leer datos de ella, escribir datos en ella y eliminar datos de la misma.This class contains code to create the database, read data from it, write data to it, and delete data from it. El código usa API asincrónicas de SQLite.NET que mueven las operaciones de base de datos a subprocesos en segundo plano.The code uses asynchronous SQLite.NET APIs that move database operations to background threads. Además, el constructor NoteDatabase toma la ruta de acceso del archivo de base de datos como un argumento.In addition, the NoteDatabase constructor takes the path of the database file as an argument. La App clase proporcionará esta ruta de acceso en el paso siguiente.This path will be provided by the App class in the next step.

    Guarde los cambios en NoteDatabase.CS eligiendo archivo > Guardar (o presionando ⌘ + S) y cierre el archivo.Save the changes to NoteDatabase.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    Advertencia

    Si intenta compilar la aplicación en este momento, se producirán errores que se corregirán en los pasos siguientes.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  8. En el Panel de solución, en el proyecto notas , haga doble clic en app.Xaml.CS para abrirlo.In the Solution Pad, in the Notes project, double-click App.xaml.cs to open it. A continuación, reemplace el código existente por el código siguiente:Then replace the existing code with the following code:

    using System;
    using System.IO;
    using Xamarin.Forms;
    using Notes.Data;
    
    namespace Notes
    {
        public partial class App : Application
        {
            static NoteDatabase database;
    
            public static NoteDatabase Database
            {
                get
                {
                    if (database == null)
                    {
                        database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes.db3"));
                    }
                    return database;
                }
            }
    
            public App()
            {
                InitializeComponent();
                MainPage = new NavigationPage(new NotesPage());
            }
    
            protected override void OnStart()
            {
                // Handle when your app starts
            }
    
            protected override void OnSleep()
            {
                // Handle when your app sleeps
            }
    
            protected override void OnResume()
            {
                // Handle when your app resumes
            }
        }
    }
    

    Este código define una Database propiedad que crea una nueva NoteDatabase instancia como singleton, pasando el nombre de archivo de la base de datos NoteDatabase como argumento al constructor.This code defines a Database property that creates a new NoteDatabase instance as a singleton, passing in the filename of the database as the argument to the NoteDatabase constructor. La ventaja de exponer la base de datos como un singleton es que se crea una conexión de base de datos única que se mantiene abierta mientras la aplicación se ejecuta, lo que evita el gasto de abrir y cerrar el archivo de base de datos cada vez que se realiza una operación de base de datos.The advantage of exposing the database as a singleton is that a single database connection is created that's kept open while the application runs, therefore avoiding the expense of opening and closing the database file each time a database operation is performed.

    Guarde los cambios en App.xaml.cs eligiendo Archivo > Guardar (o presionando ⌘ + S) y cierre el archivo.Save the changes to App.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    Advertencia

    Si intenta compilar la aplicación en este momento, se producirán errores que se corregirán en los pasos siguientes.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  9. En el Panel de solución, en el proyecto notas , haga doble clic en NotesPage.Xaml.CS para abrirlo.In the Solution Pad, in the Notes project, double-click NotesPage.xaml.cs to open it. A continuación, OnAppearing Reemplace el método por el código siguiente:Then replace the OnAppearing method with the following code:

    protected override async void OnAppearing()
    {
        base.OnAppearing();
    
        listView.ItemsSource = await App.Database.GetNotesAsync();
    }
    

    Este código rellena el ListView con cualquier nota almacenada en la base de datos.This code populates the ListView with any notes stored in the database.

    Guarde los cambios en NotesPage.Xaml.CS eligiendo archivo > Guardar (o presionando ⌘ + S) y cierre el archivo.Save the changes to NotesPage.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    Advertencia

    Si intenta compilar la aplicación en este momento, se producirán errores que se corregirán en los pasos siguientes.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  10. En el Panel de solución, haga doble clic en NoteEntryPage.Xaml.CS para abrirlo.In the Solution Pad, double-click NoteEntryPage.xaml.cs to open it. A continuación, OnSaveButtonClicked Reemplace OnDeleteButtonClicked los métodos y por el código siguiente:Then replace the OnSaveButtonClicked and OnDeleteButtonClicked methods with the following code:

    async void OnSaveButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        note.Date = DateTime.UtcNow;
        await App.Database.SaveNoteAsync(note);
        await Navigation.PopAsync();
    }
    
    async void OnDeleteButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        await App.Database.DeleteNoteAsync(note);
        await Navigation.PopAsync();
    }
    

    Almacena una Note instancia de, que representa una sola nota, en la BindingContext de la página. NoteEntryPageThe NoteEntryPage stores a Note instance, which represents a single note, in the BindingContext of the page. Cuando se OnSaveButtonClicked ejecuta el controlador de eventos, Note la instancia se guarda en la base de datos y la aplicación se desplaza a la página anterior.When the OnSaveButtonClicked event handler is executed, the Note instance is saved to the database and the application navigates back to the previous page. Cuando se OnDeleteButtonClicked ejecuta el controlador de eventos, Note la instancia se elimina de la base de datos y la aplicación se desplaza a la página anterior.When the OnDeleteButtonClicked event handler is executed, the Note instance is deleted from the database and the application navigates back to the previous page.

    Guarde los cambios en NoteEntryPage.Xaml.CS eligiendo archivo > Guardar (o presionando ⌘ + S) y cierre el archivo.Save the changes to NoteEntryPage.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

  11. Compile y ejecute el proyecto en cada plataforma.Build and run the project on each platform. Para obtener más información, vea crear la guía de inicio rápido.For more information, see Building the quickstart.

    En el NotesPage , presione + el botón para navegar hasta el NoteEntryPage y escriba una nota.On the NotesPage press the + button to navigate to the NoteEntryPage and enter a note. Después de guardar la nota, la aplicación se devolverá a la NotesPage.After saving the note the application will navigate back to the NotesPage.

    Escriba un número de notas, de longitud variable, para observar el comportamiento de la aplicación.Enter a number of notes, of varying length, to observe the application behavior.

Pasos siguientesNext steps

En esta guía de inicio rápido, aprendió a:In this quickstart, you learned how to:

  • Use el administrador de paquetes de NuGet para agregar un paquete de NuGet a un proyecto.Use the NuGet Package Manager to add a NuGet package to a project.
  • Almacenar datos localmente en una base de datos de SQLite.NET.Store data locally in a SQLite.NET database.

Para aplicar estilo a la aplicación con estilos XAML, continúe con la siguiente guía de inicio rápido.To style the application with XAML styles, continue to the next quickstart.