Archiviare i dati in un database SQLite.NET localeStore Data in a Local SQLite.NET Database

Scaricare esempio Scaricare l'esempioDownload Sample Download the sample

In questa Guida introduttiva si apprenderà come:In this quickstart, you will learn how to:

  • Usare Gestione pacchetti NuGet per aggiungere un pacchetto NuGet a un progetto.Use the NuGet Package Manager to add a NuGet package to a project.
  • Archiviare i dati in locale in un database SQLite.NET.Store data locally in a SQLite.NET database.

La Guida introduttiva illustra come archiviare i dati in un database SQLite.NET locale.The quickstart walks through how to store data in a local SQLite.NET database. Il risultato è riportato di seguito:The final application is shown below:

[ ![(database-images/screenshots1-sml.png " ")]Pagina note] (database-images/screenshots1.png#lightbox "Pagina note") Nota pagina immissione(database-images/screenshots2.png#lightbox "Nota pagina voce") [ ![(database-images/screenshots2-sml.png " ")]]

PrerequisitiPrerequisites

Prima di provare questa Guida introduttiva, è necessario completare correttamente la Guida introduttiva precedente .You should successfully complete the previous quickstart before attempting this quickstart. In alternativa, scaricare l' esempio di Guida introduttiva precedente e usarlo come punto di partenza per questa Guida introduttiva.Alternatively, download the previous quickstart sample and use it as the starting point for this quickstart.

Aggiornare l'app con Visual StudioUpdate the app with Visual Studio

  1. Avviare Visual Studio e aprire la soluzione note.Launch Visual Studio and open the Notes solution.

  2. In Esplora soluzioniselezionare il progetto note , fare clic con il pulsante destro del mouse e scegliere Gestisci pacchetti NuGet... :In Solution Explorer, select the Notes project, right-click and select Manage NuGet Packages...:

  3. In Gestione pacchetti NuGet selezionare la scheda Sfoglia, cercare il pacchetto NuGet sqlite-net-pcl, selezionarlo e fare clic sul pulsante Installa per aggiungerlo al progetto: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

    Esiste una serie di pacchetti NuGet con nomi simili.There are a number of NuGet packages with similar names. Il pacchetto corretto ha questi attributi:The correct package has these attributes:

    • Autore/i: Frank A. KruegerAuthor(s): Frank A. Krueger
    • ID: sqlite-net-pclId: sqlite-net-pcl
    • Collegamento NuGet: sqlite-net-pclNuGet link: sqlite-net-pcl

    Nonostante il nome del pacchetto, questo pacchetto NuGet può essere usato anche nei progetti .NET Standard.Despite the package name, this NuGet package can be used in .NET Standard projects.

    Il pacchetto verrà usato per integrare le operazioni di database nell'applicazione.This package will be used to incorporate database operations into the application.

  4. In Esplora soluzioni, nel progetto note , aprire note.cs nella cartella Models e sostituire il codice esistente con il codice seguente: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; }
        }
    }
    

    Questa classe definisce un Note modello in cui vengono archiviati i dati relativi a ogni nota nell'applicazione.This class defines a Note model that will store data about each note in the application. La ID proprietà è contrassegnata PrimaryKey con AutoIncrement gli attributi e per garantire Note che ogni istanza nel database SQLite.NET disponga di un ID univoco fornito da 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.

    Salvare le modifiche apportate a note.cs premendo CTRL + Se chiudere il file.Save the changes to Note.cs by pressing CTRL+S, and close the file.

    Avviso

    Il tentativo di compilare l'applicazione a questo punto genererà errori che verranno corretti nei passaggi successivi.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  5. In Esplora soluzioniaggiungere una nuova cartella denominata Data al progetto Note .In Solution Explorer, add a new folder named Data to the Notes project.

  6. In Esplora soluzioni, nel progetto note , aggiungere una nuova classe denominata NoteDatabase alla cartella dati .In Solution Explorer, in the Notes project, add a new class named NoteDatabase to the Data folder.

  7. In NoteDatabase.cssostituire il codice esistente con il codice seguente: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);
            }
        }
    }
    

    Questa classe contiene codice per la creazione del database, la lettura dei dati, la scrittura dei dati e l'eliminazione dei dati.This class contains code to create the database, read data from it, write data to it, and delete data from it. Il codice usa API SQLite.NET asincrone che spostano le operazioni sul database in thread in background.The code uses asynchronous SQLite.NET APIs that move database operations to background threads. Inoltre, il costruttore NoteDatabase accetta il percorso del file di database come argomento.In addition, the NoteDatabase constructor takes the path of the database file as an argument. Questo percorso verrà fornito dalla App classe nel passaggio successivo.This path will be provided by the App class in the next step.

    Salvare le modifiche apportate a NoteDatabase.cs premendo CTRL + Se chiudere il file.Save the changes to NoteDatabase.cs by pressing CTRL+S, and close the file.

    Avviso

    Il tentativo di compilare l'applicazione a questo punto genererà errori che verranno corretti nei passaggi successivi.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  8. In Esplora soluzioni, nel progetto note , fare doppio clic su app.XAML.cs per aprirlo.In Solution Explorer, in the Notes project, double-click App.xaml.cs to open it. Sostituire quindi il codice esistente con il codice seguente: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
            }
        }
    }
    

    Questo codice definisce una Database proprietà che crea una nuova NoteDatabase istanza come singleton, passando il nome file del database NoteDatabase come argomento al costruttore.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. Il vantaggio dell'esposizione del database come singleton è la creazione di una singola connessione al database che verrà mantenuta aperta durante l'esecuzione dell'applicazione, evitando così l'onere dell'apertura e della chiusura del file di database ogni volta che viene eseguita un'operazione di database.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.

    Salvare le modifiche apportate a App.xaml.cs premendo CTRL+S e chiudere il file.Save the changes to App.xaml.cs by pressing CTRL+S, and close the file.

    Avviso

    Il tentativo di compilare l'applicazione a questo punto genererà errori che verranno corretti nei passaggi successivi.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  9. In Esplora soluzioni, nel progetto note , fare doppio clic su NotesPage.XAML.cs per aprirlo.In Solution Explorer, in the Notes project, double-click NotesPage.xaml.cs to open it. Sostituire quindi il OnAppearing metodo con il codice seguente:Then replace the OnAppearing method with the following code:

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

    Questo codice popola l'oggetto ListView con le eventuali note archiviate nel database.This code populates the ListView with any notes stored in the database.

    Salvare le modifiche apportate a NotesPage.XAML.cs premendo CTRL + Se chiudere il file.Save the changes to NotesPage.xaml.cs by pressing CTRL+S, and close the file.

    Avviso

    Il tentativo di compilare l'applicazione a questo punto genererà errori che verranno corretti nei passaggi successivi.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  10. In Esplora soluzionifare doppio clic su NoteEntryPage.XAML.cs per aprirlo.In Solution Explorer, double-click NoteEntryPage.xaml.cs to open it. Sostituire quindi i OnSaveButtonClicked metodi OnDeleteButtonClicked e con il codice seguente: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();
    }
    

    Archivia un' Note istanza di che rappresenta una singola nota nell'oggetto BindingContext della pagina. NoteEntryPageThe NoteEntryPage stores a Note instance, which represents a single note, in the BindingContext of the page. Quando viene OnSaveButtonClicked eseguito il gestore eventi, l' Note istanza viene salvata nel database e l'applicazione torna alla pagina precedente.When the OnSaveButtonClicked event handler is executed, the Note instance is saved to the database and the application navigates back to the previous page. Quando viene OnDeleteButtonClicked eseguito il gestore eventi, l' Note istanza viene eliminata dal database e l'applicazione torna alla pagina precedente.When the OnDeleteButtonClicked event handler is executed, the Note instance is deleted from the database and the application navigates back to the previous page.

    Salvare le modifiche apportate a NoteEntryPage.XAML.cs premendo CTRL + Se chiudere il file.Save the changes to NoteEntryPage.xaml.cs by pressing CTRL+S, and close the file.

  11. Compilare ed eseguire il progetto in ogni piattaforma.Build and run the project on each platform. Per ulteriori informazioni, vedere la pagina relativa alla compilazione della Guida introduttiva.For more information, see Building the quickstart.

    In NotesPage premere il + pulsante per passare al NoteEntryPage e immettere una nota.On the NotesPage press the + button to navigate to the NoteEntryPage and enter a note. Dopo aver salvato la nota, l'applicazione tornerà a NotesPage.After saving the note the application will navigate back to the NotesPage.

    Immettere un numero di note, di lunghezza variabile, per osservare il comportamento dell'applicazione.Enter a number of notes, of varying length, to observe the application behavior.

Aggiornare l'app con Visual Studio per MacUpdate the app with Visual Studio for Mac

  1. Avviare Visual Studio per Mac e aprire il progetto note.Launch Visual Studio for Mac and open the Notes project.

  2. Nella riquadro della soluzioneselezionare il progetto note , fare clic con il pulsante destro del mouse e scegliere Aggiungi > Aggiungi pacchetti NuGet... :In the Solution Pad, select the Notes project, right-click and select Add > Add NuGet Packages...:

  3. Nella finestra Aggiungi pacchetti cercare il pacchetto NuGet sqlite-net-pcl, selezionarlo e fare clic sul pulsante Aggiungi pacchetto per aggiungerlo al progetto: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

    Esiste una serie di pacchetti NuGet con nomi simili.There are a number of NuGet packages with similar names. Il pacchetto corretto ha questi attributi:The correct package has these attributes:

    • Autore: Frank A. KruegerAuthor: Frank A. Krueger
    • ID: sqlite-net-pclId: sqlite-net-pcl
    • Collegamento NuGet: sqlite-net-pclNuGet link: sqlite-net-pcl

    Nonostante il nome del pacchetto, questo pacchetto NuGet può essere usato anche nei progetti .NET Standard.Despite the package name, this NuGet package can be used in .NET Standard projects.

    Il pacchetto verrà usato per integrare le operazioni di database nell'applicazione.This package will be used to incorporate database operations into the application.

  4. Nel riquadro della soluzione, nel progetto note , aprire note.cs nella cartella Models e sostituire il codice esistente con il codice seguente: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; }
        }
    }
    

    Questa classe definisce un Note modello in cui vengono archiviati i dati relativi a ogni nota nell'applicazione.This class defines a Note model that will store data about each note in the application. La ID proprietà è contrassegnata PrimaryKey con AutoIncrement gli attributi e per garantire Note che ogni istanza nel database SQLite.NET disponga di un ID univoco fornito da 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.

    Salvare le modifiche apportate a note.cs scegliendo file > Salva (o premendo ⌘ + S) e chiudere il file.Save the changes to Note.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    Avviso

    Il tentativo di compilare l'applicazione a questo punto genererà errori che verranno corretti nei passaggi successivi.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  5. Nella riquadro della soluzioneaggiungere una nuova cartella denominata Data al progetto Note .In the Solution Pad, add a new folder named Data to the Notes project.

  6. Nel riquadro della soluzionenel progetto note aggiungere una nuova classe denominata NoteDatabase alla cartella dati .In the Solution Pad, in the Notes project, add a new class named NoteDatabase to the Data folder.

  7. In NoteDatabase.cssostituire il codice esistente con il codice seguente: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);
            }
        }
    }
    

    Questa classe contiene codice per la creazione del database, la lettura dei dati, la scrittura dei dati e l'eliminazione dei dati.This class contains code to create the database, read data from it, write data to it, and delete data from it. Il codice usa API SQLite.NET asincrone che spostano le operazioni sul database in thread in background.The code uses asynchronous SQLite.NET APIs that move database operations to background threads. Inoltre, il costruttore NoteDatabase accetta il percorso del file di database come argomento.In addition, the NoteDatabase constructor takes the path of the database file as an argument. Questo percorso verrà fornito dalla App classe nel passaggio successivo.This path will be provided by the App class in the next step.

    Salvare le modifiche apportate a NoteDatabase.cs scegliendo file > Salva (o premendo ⌘ + S) e chiudere il file.Save the changes to NoteDatabase.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    Avviso

    Il tentativo di compilare l'applicazione a questo punto genererà errori che verranno corretti nei passaggi successivi.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  8. Nel riquadro della soluzione, nel progetto note , fare doppio clic su app.XAML.cs per aprirlo.In the Solution Pad, in the Notes project, double-click App.xaml.cs to open it. Sostituire quindi il codice esistente con il codice seguente: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
            }
        }
    }
    

    Questo codice definisce una Database proprietà che crea una nuova NoteDatabase istanza come singleton, passando il nome file del database NoteDatabase come argomento al costruttore.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. Il vantaggio dell'esposizione del database come singleton è la creazione di una singola connessione al database che verrà mantenuta aperta durante l'esecuzione dell'applicazione, evitando così l'onere dell'apertura e della chiusura del file di database ogni volta che viene eseguita un'operazione di database.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.

    Salvare le modifiche apportate a App.xaml.cs scegliendo File > Salva o premendo ⌘ + S e chiudere il file.Save the changes to App.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    Avviso

    Il tentativo di compilare l'applicazione a questo punto genererà errori che verranno corretti nei passaggi successivi.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  9. Nel riquadro della soluzione, nel progetto note , fare doppio clic su NotesPage.XAML.cs per aprirlo.In the Solution Pad, in the Notes project, double-click NotesPage.xaml.cs to open it. Sostituire quindi il OnAppearing metodo con il codice seguente:Then replace the OnAppearing method with the following code:

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

    Questo codice popola l'oggetto ListView con le eventuali note archiviate nel database.This code populates the ListView with any notes stored in the database.

    Salvare le modifiche apportate a NotesPage.XAML.cs scegliendo file > Salva (o premendo ⌘ + S) e chiudere il file.Save the changes to NotesPage.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    Avviso

    Il tentativo di compilare l'applicazione a questo punto genererà errori che verranno corretti nei passaggi successivi.Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  10. Nella riquadro della soluzionefare doppio clic su NoteEntryPage.XAML.cs per aprirlo.In the Solution Pad, double-click NoteEntryPage.xaml.cs to open it. Sostituire quindi i OnSaveButtonClicked metodi OnDeleteButtonClicked e con il codice seguente: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();
    }
    

    Archivia un' Note istanza di che rappresenta una singola nota nell'oggetto BindingContext della pagina. NoteEntryPageThe NoteEntryPage stores a Note instance, which represents a single note, in the BindingContext of the page. Quando viene OnSaveButtonClicked eseguito il gestore eventi, l' Note istanza viene salvata nel database e l'applicazione torna alla pagina precedente.When the OnSaveButtonClicked event handler is executed, the Note instance is saved to the database and the application navigates back to the previous page. Quando viene OnDeleteButtonClicked eseguito il gestore eventi, l' Note istanza viene eliminata dal database e l'applicazione torna alla pagina precedente.When the OnDeleteButtonClicked event handler is executed, the Note instance is deleted from the database and the application navigates back to the previous page.

    Salvare le modifiche apportate a NoteEntryPage.XAML.cs scegliendo file > Salva (o premendo ⌘ + S) e chiudere il file.Save the changes to NoteEntryPage.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

  11. Compilare ed eseguire il progetto in ogni piattaforma.Build and run the project on each platform. Per ulteriori informazioni, vedere la pagina relativa alla compilazione della Guida introduttiva.For more information, see Building the quickstart.

    In NotesPage premere il + pulsante per passare al NoteEntryPage e immettere una nota.On the NotesPage press the + button to navigate to the NoteEntryPage and enter a note. Dopo aver salvato la nota, l'applicazione tornerà a NotesPage.After saving the note the application will navigate back to the NotesPage.

    Immettere un numero di note, di lunghezza variabile, per osservare il comportamento dell'applicazione.Enter a number of notes, of varying length, to observe the application behavior.

Passaggi successiviNext steps

In questa Guida introduttiva si è appreso come:In this quickstart, you learned how to:

  • Usare Gestione pacchetti NuGet per aggiungere un pacchetto NuGet a un progetto.Use the NuGet Package Manager to add a NuGet package to a project.
  • Archiviare i dati in locale in un database SQLite.NET.Store data locally in a SQLite.NET database.

Per applicare uno stile all'applicazione con gli stili XAML, passare alla Guida introduttiva successiva.To style the application with XAML styles, continue to the next quickstart.