Avalonia学习实践(四)--实现最简单的SQLite操作辅助类

这里写自定义目录标题

在桌面应用程序开发中,如果有数据存储的需要,同时对性能要求不是极高,又想应用能够随时随地运行,轻便小巧的SQlite自然是不二之选。本篇其实跟Avalonia没啥关系,SQLite的操作辅助类网上也是一大堆,这里就权当温故知新了。


1.安装Microsoft.Data.Sqlite

在这里插入图片描述
为什么用Microsoft.Data.Sqlite,不用System.Data.SQLite?
其实没啥特别原因,就是System.Data.SQLite用惯,想换Microsoft.Data.Sqlite试试。从名字上就能大概区分出来,Microsoft.Data.Sqlite是微软官方出的,System.Data.SQLite是SQLite团队出的,功能上并没有太大差别。

Microsoft.Data.Sqlite概述

2.实现常用方法

    public static class SqliteHelper
    {
        public const string DbConnectString = "Data Source=data//database.db";

        #region ExecuteReader
        public static DbDataReader ExecuteReader(string commandText, IList<SqliteParameter> parameters = null)
        {
            using (var connection = new SqliteConnection(DbConnectString))
            {
                connection.Open();
                var command = connection.CreateCommand();
                command.CommandText = commandText;
                if (parameters != null)
                {
                    foreach (var p in parameters)
                    {
                        command.Parameters.Add(p);
                    }
                }
                return command.ExecuteReader();
            }
        } 
        #endregion

        #region ExecuteDatatable
        public static DataTable ExecuteDatatable(string commandText, IList<SqliteParameter> parameters = null)
        {
            using (var connection = new SqliteConnection(DbConnectString))
            {
                connection.Open();
                var command = connection.CreateCommand();
                command.CommandText = commandText;
                if (parameters != null)
                {
                    foreach (var p in parameters)
                    {
                        command.Parameters.Add(p);
                    }
                }
                DataTable dt = new DataTable();
                dt.Load(command.ExecuteReader());
                return dt;
            }
        } 
        #endregion

        #region ExecuteList<T>
        public static List<T> ExecuteList<T>(string commandText, IList<SqliteParameter> parameters = null) where T : class, new()
        {
            using (var connection = new SqliteConnection(DbConnectString))
            {
                connection.Open();
                var command = connection.CreateCommand();
                command.CommandText = commandText;
                if (parameters != null)
                {
                    foreach (var p in parameters)
                    {
                        command.Parameters.Add(p);
                    }
                }
                var dt=new DataTable();
                var result = new List<T>();
                var reader = command.ExecuteReader();
                //var properties = typeof(T).GetProperties().ToList();
                //while (reader.Read())
                //{
                //    var obj = new T();

                //    foreach (var property in properties)
                //    {
                //        try
                //        {
                //            var id = reader.GetOrdinal(property.Name.ToString());
                //            if (!reader.IsDBNull(id))
                //            {
                //                if (reader.GetValue(id) != DBNull.Value)
                //                {
                //                    property.SetValue(obj, Convert.ChangeType(reader.GetValue(id),reader.GetFieldType(id)),null);
                //                }
                //            }
                //        }
                //        catch(Exception e)
                //        {
                //            continue;
                //        }
                //    }

                //    result.Add(obj);
                //}
                dt.Load(reader);
                string strJson=Newtonsoft.Json.JsonConvert.SerializeObject(dt);
                result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<T>>(strJson);
                return result;
            }
        }

        #endregion

        #region ExecuteScalar
        public static object ExecuteScalar(string commandText, IList<SqliteParameter> parameters, int timeout)
        {
            using (var connection = new SqliteConnection(DbConnectString))
            {
                connection.Open();
                var command = connection.CreateCommand();
                command.CommandText = commandText;
                command.CommandTimeout = timeout;
                if (parameters != null)
                {
                    foreach (var p in parameters)
                    {
                        command.Parameters.Add(p);
                    }
                }
                return command.ExecuteScalar();
            }
        } 
        #endregion

        #region ExecuteScalar<T>
        public static T ExecuteScalar<T>(string commandText, IList<SqliteParameter> parameters = null, int timeout = 30)
        {
            using (var connection = new SqliteConnection(DbConnectString))
            {
                connection.Open();
                var command = connection.CreateCommand();
                command.CommandText = commandText;
                command.CommandTimeout = timeout;
                if (parameters != null)
                {
                    foreach (var p in parameters)
                    {
                        command.Parameters.Add(p);
                    }
                }
                return (T)command.ExecuteScalar();
            }
        } 
        #endregion

        #region ExecuteNonQuery
        public static int ExecuteNonQuery(string commandText, IList<SqliteParameter> parameters, int timeout = 30)
        {
            using (var connection = new SqliteConnection(DbConnectString))
            {
                connection.Open();
                var command = connection.CreateCommand();
                command.CommandText = commandText;
                if (parameters != null)
                {
                    foreach (var p in parameters)
                    {
                        command.Parameters.Add(p);
                    }
                }
                return command.ExecuteNonQuery();
            }
        } 
        #endregion
    }

这里面实现了几个基本方法,均是SQL语句的执行和结果的返回,在此基础上可以进一步进行封装供业务类使用,比较复杂的业务还是老老实实找个ORM方便些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值