xamarin.forms: retrieving existing data from .db file

故事扮演 提交于 2020-01-22 02:24:46

问题


In Xamarin Forms 4.3, I'm following this "Local Databases" doc: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/data/databases

This doc explains how to create and use a new sqlite db, but how do I go about in loading and displaying data in an existing .db file with the end purpose of transferring it into a new local sqlite database?

using SQLite;

namespace TruckExample.Models
{
    public class Truck
    {
        [PrimaryKey, AutoIncrement]
        public int TruckNo { get; set; }
        public string TruckName { get; set; }
    }
}
//////////////////////////////////////////////
using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite;
using TruckExample.Models;

namespace TruckExample.Data
{
    public class TruckDatabase
    {
        readonly SQLiteAsyncConnection _database;

        public TruckDatabase(string dbPath)
        {
            _database = new SQLiteAsyncConnection(dbPath);
            _database.CreateTableAsync<Truck>().Wait();
        }

        public Task<List<Truck>> GetTrucksAsync()
        {
            return _database.Table<Truck>().ToListAsync();
        }
    }
}
////////////////////////////////////////////////
using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using TruckExample.Data;
using System.IO;

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace TruckExample
{
    public partial class App : Application
    {
        static TruckDatabase database;

        public static TruckDatabase Database
        {
            get
            {
                if(database == null)
                {
                    database = new TruckDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Truck.db"));  
                }

                return database;
            }
        }

        public App()
        {
            InitializeComponent();
            MainPage = new NavigationPage(new MainPage());
        }
   }
}
/////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace TruckExample
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MainPage : ContentPage
    {
        public MainPage ()
        {
            InitializeComponent ();
        }

        protected override async void OnAppearing()
        {
            base.OnAppearing();
            listView.ItemsSource = await App.Database.GetTrucksAsync();
            Debug.Write(App.Database.GetTrucksAsync());

        }
    }
}

回答1:


For others, helpful resources:

Implementation by Hameed Kunkanoor: "Creating a sqlite databse and storing your data in your android and ios application in Xamarin Forms" https://medium.com/@hameedkunkanoor/creating-a-sqlite-databse-and-storing-your-data-in-your-android-and-ios-application-in-xamarin-2ebaa79cdff0 (Refer to his git if needed)

Explanation/response by Matthewrdev: Use a local database in Xamarin

To improve the implementation -- Brandon Minnick: "Xamarin: Efficiently Using a SQLite Database" https://codetraveler.io/2019/11/26/efficiently-initializing-sqlite-database/



来源:https://stackoverflow.com/questions/59471412/xamarin-forms-retrieving-existing-data-from-db-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!