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方便些。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Avalonia Print是一种用于在Avalonia图形界面框架中进行打印的功能。Avalonia是一个用于创建跨平台用户界面的开源项目,而Avalonia Print则是其提供的一个用于打印的工具。通过Avalonia Print,我们可以在Avalonia应用程序中实现打印功能,无论是打印文本、图像还是其他型的内容都可以轻松实现Avalonia Print的使用相对简单,我们只需要在Avalonia应用程序中引入相关的命名空间和,就可以使用其提供的打印方法和属性。我们可以通过调用Avalonia Print提供的Print方法来触发打印操作,而在打印过程中,可以使用Avalonia Print提供的一些属性来设置打印的参数,例如打印机名称、打印份数、页面方向以及页面大小等。 使用Avalonia Print进行打印时,我们可以先创建一个打印文档对象,然后在该文档对象中定义要打印的内容,包括页面布局、文本内容、图像等等。在定义完成后,我们可以将该打印文档对象传递给Avalonia Print的Print方法,以开始打印操作。 值得一提的是,Avalonia Print还提供了一些与打印相关的事件,如打印开始事件、打印完成事件等,我们可以通过订阅这些事件来获得打印的进度和结果。此外,Avalonia Print还支持在打印过程中自定义页面的外观,例如可以通过实现自定义的页面模板来实现自定义的打印布局。 总之,Avalonia Print是Avalonia框架中的一个方便易用的打印工具,通过它我们可以在Avalonia应用程序中实现打印功能,为用户提供更好的打印体验。无论是在开发商业应用程序、办公软件还是其他场景中,Avalonia Print都能为我们提供便捷高效的打印解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值