SqLite에 연결 Xamarin 애플리케이션 연결

25715 단어
El primer paso es Instalar el nuget sqlite-net-plc



Despues creamos una clase de Conexion el cual tiene tres métodos,uno para retornar el path para asignar el nombre de base de datos, un método asíncrono y otro que no para conexiones .

using ApplicationSales.models;
using SQLite;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;


namespace ApplicationSales.services.SqlLite
{
    public class SqlLiteConexion
    {

        private string pathdb;
        public SqlLiteConexion() { }
        public string Conector()
        {
            string dbname = "db.sqlite";
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            pathdb = Path.Combine(path, dbname);

            return pathdb;
        }

        public SQLiteConnection Conn()
        {
            SQLiteConnection conn = new SQLiteConnection(App.pedidosDB);
            return conn;
        }


        public SQLiteAsyncConnection GetConnectionAsync()
        {
            return new SQLiteAsyncConnection(App.pedidosDB);
        }

    }
}



En el App.cs asignamos un parametro en el constructor para asignar la base de datos a la aplicacion android.

namespace ApplicationSales
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class App : Application
    {
        public static string pedidosDB;
        public App(string SqlLite)
        {

            InitializeComponent();
            pedidosDB = SqlLite;
            MainPage = new MainPage();

        }

        protected override void OnStart()
        {
        }

        protected override void OnSleep()
        {
        }

        protected override void OnResume()
        {
        }
    }
}



Creamos el modelo de datos que tendra la tabla en mi caso use una que tenía implementada.

 public class ProductosMesa
    {
        public int? IdRegistro { get; set; }
        public int? IdProducto { get; set; }
        public int? IdPresentacion { get; set; }
        public int? IdMesa { get; set; }
        public decimal? Cantidad { get; set; }
        public int? IdPrecio { get; set; }
        public string NotasAdicionales { get; set; }
        public bool? Llevar { get; set; }
        public bool? Impreso { get; set; }
        public DateTime? DateStamp { get; set; }
        public decimal? PrecioDado { get; set; }
        public string DescCombos { get; set; }
        public string CadenaCombos { get; set; }
        public int? Ident { get; set; }
        public string Desc1 { get; set; }
        public string Desc2 { get; set; }
        public int? IdDivision { get; set; }

    }



Luego en el MainActivity de nuestro proyecto android agregamos la clase de conexion.



 SqlLiteConexion conexion=new SqlLiteConexion();//llamamos la conexion
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App(conexion.Conector())); //asignamos el método conector


Luego creamos una interfaz para asignar los metodos que llamaremos en la clase servicio, esta solo es una manera de hacerlo, podemos incluso usar una clase abstracta o usar directamente una clase sin hacer herencia de clases.



using ApplicationSales.models;
using DocumentFormat.OpenXml.Office2021.DocumentTasks;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Threading.Tasks;

namespace ApplicationSales.services.SqlLite
{
    public interface ISqlLiteCrud
    {
        Task<List<ProductosMesa>> GetProductos();
        void InsertarProductos(ProductosMesa producto);
        void ActualizarProductos(ProductosMesa producto);
        Task<int> BorrarProductos(ProductosMesa producto);
        void BorrarTabla();
        Task<List<ProductosMesa>> MaxRegistro();
    }
}



Creamos la clase donde tendremos el crud y le implementamos la interface.

using ApplicationSales.models;
using SQLite;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ApplicationSales.services.SqlLite
{
    public class SqlLiteCrud : ISqlLiteCrud
    {
        private SqlLiteConexion sqlLiteConexion;
        public SqlLiteCrud()
        {
            sqlLiteConexion = new SqlLiteConexion();
            sqlLiteConexion.GetConnectionAsync().CreateTableAsync<ProductosMesa>();
        }

        public async void ActualizarProductos(ProductosMesa producto)
        {
            await sqlLiteConexion.GetConnectionAsync().UpdateAsync(producto);
        }

        public async Task<int> BorrarProductos(ProductosMesa producto)
        {
            var data = await sqlLiteConexion.GetConnectionAsync().DeleteAsync(producto);
            return data;
        }

        public void BorrarTabla()
        {
            sqlLiteConexion.GetConnectionAsync().DeleteAllAsync<ProductosMesa>();
        }

        public async Task<List<ProductosMesa>> GetProductos()
        {
            return sqlLiteConexion
                        .Conn()
                        .Table<ProductosMesa>().ToList();
        }

        public async void InsertarProductos(ProductosMesa producto)
        {
            try
            {

                await sqlLiteConexion.GetConnectionAsync().InsertAsync(producto);
                await sqlLiteConexion.GetConnectionAsync().CloseAsync();
                await Xamarin.Forms.Application.Current.MainPage.DisplayAlert("Agregar a cocina", "Guardado", "ok");
            }
            catch (SQLiteException)
            {
            }

        }

        public async Task<List<ProductosMesa>> MaxRegistro()
        {

            return sqlLiteConexion.Conn().Table<ProductosMesa>().ToList();
        }
    }
}




Para hacer las acciones del Crud lo recomendado es usar el MVVM.
Primero llamamos de forma global la 인터페이스 ISqlLiteCrud.

private ISqlLiteCrud sqlLiteCrud= DependencyService.Get<ISqlLiteCrud>();


Ojo: Debemos de agregar la Interface en app.cs



Usando el metodo para guardar

public void guardar(){
  ProductosMesa = new ProductosMesa()
            {
                IdRegistro = 1,
                IdProducto = 1,
                Cantidad = 12,
                PrecioDado =122,
                Llevar = true,
                NotasAdicionales="notas",
                Desc1="qweqwe",
                Desc2="asdasd",
                IdMesa = 1

            };

            if (ProductosMesa != null)
            {
                sqlLiteCrud.InsertarProductos(ProductosMesa);


            }
}


Obtener la cantidad de registros de la tabla.
Para hacer esto llamaremos el método MaxRegistro de la clase SqlLiteCrud que obtiene la lista de registros de la tabla.

 var data=sqlLiteCrud.MaxRegistro().Result;//obtenemos registro
 int Id = data.Count();//contamos cantidad de registros


Esta es una manera un poco compleja de crear conexión a SqLite en Xamarin forms.

좋은 웹페이지 즐겨찾기