C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法

一、背景介绍
SQLite是一个轻量级的关系型数据库,具有体积小,速度快,操作简便,易于集成等优点,在嵌入式设备,移动设备及桌面应用程序等方面得到广泛使用。C#语言作为一个跨平台的编程语言,在各个领域的应用也十分广泛,同时也提供了SQLite数据库的连接方式,提供SQLite连接C#的API。虽然C#提供了一些SQLite的API,但是操作SQLite数据库仍然比较繁琐,不能像操作SQL SERVER数据库那样简单便捷。因此,我们需要封装SQLite API来减少我们的编码量。

二、实现方法
SQLiteHelper是一个对SQLite ADO.NET的数据库操作类库,提供了很多方便的方法帮助我们完成SQLite的数据操作。它可以极大程度地减少开发者的编码量。

  1. 导入SQLiteHelper类库
    创建一个类库项目,将SQLiteHelper.cs文件拷贝至该项目根目录后添加。在该类库项目中modify AssemblyInfo.cs文件,使该类集合能够被引用到其他项目中。
  [assembly: AssemblyTitle("SQLiteHelper")]
  [assembly: AssemblyDescription("")]
  [assembly: AssemblyConfiguration("")]
  [assembly: AssemblyCompany("")]
  [assembly: AssemblyProduct("SQLiteHelper")]
  [assembly: AssemblyCopyright("")]
  [assembly: AssemblyTrademark("")]
  [assembly: AssemblyCulture("")]
  [assembly: ComVisible(false)]
  [assembly: Guid("f6a8f27a-a98f-4743-a666-7df67b3acbc0")]
  [assembly: AssemblyVersion("1.0.0.0")]
  [assembly: AssemblyFileVersion("1.0.0.0")]
  1. 创建SQLiteHelper类
    为实现C#基于SQLiteHelper类实现存取Sqlite数据库的方法,我们需要新建类SQLiteHelper,来实现SQLite ADO.NET的数据库操作。SQLiteHelper类需要与SQLiteHelper.cs的不同8个方面有所变化,分别是:

·数据库路径不再写死而是动态传入;
·多个线程安全问题,在每个执行线程中都需要独立运行,所以需要每个连接都开一个对象来访问,否则会出现链接不断开的问题;
·增加函数QueryValueSql返回查询结果第一行第一列的值;
·增加函数QueryDataTableSql返回查询结果的DataTable对象;
·增加函数QueryDataSetSql返回查询结果的DataTable对象;
·增加函数UpdateDataTableSql,通过传入DataTable对象进行更新;
·增加函数UpdateDataSetSql,通过传入DataSet对象进行更新;
·修正了SQLiteCommand对象没有释放引起的Application锁死;
·增加SQL注入防范。

修改后的SQLiteHelper核心代码如下:

using System.Data;
using System.Data.SQLite;

namespace SQLiteHelper
{
    public class SQLiteHelper
    {
        string dbPath;

        public SQLiteHelper(string dbPath)
        {
            this.dbPath = dbPath;
        }

        private int ExecuteNonQuery(SqlCommand cmd)
        {
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbPath + ";")){
                cmd.Connection = conn;
                conn.Open();
                int result = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return result;
            }
        }

        private object ExecuteScalar(SqlCommand cmd)
        {
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbPath + ";")){
                cmd.Connection = conn;
                conn.Open();
                object obj = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return obj;
            }
        }

        public int ExecuteNonQuerySql(string sql, params SqlParameter[] parameters)
        {
            using (SQLiteCommand cmd = new SQLiteCommand(sql)){
                if (parameters != null)
                    cmd.Parameters.AddRange(parameters);
                return ExecuteNonQuery(cmd);
            }
        }

        public object ExecuteScalarSql(string sql, params SqlParameter[] parameters)
        {
            using (SQLiteCommand cmd = new SQLiteCommand(sql)){
                if (parameters != null)
                    cmd.Parameters.AddRange(parameters);
                return ExecuteScalar(cmd);
            }
        }

        public DataTable QueryDataTableSql(string sql, params SqlParameter[] parameters)
        {
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbPath + ";")){
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);
                if (parameters != null)
                    adapter.SelectCommand.Parameters.AddRange(parameters);
                DataTable table = new DataTable();
                adapter.Fill(table);
                return table;
            }
        }

        public DataSet QueryDataSetSql(string sql, params SqlParameter[] parameters)
        {
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbPath + ";")){
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);
                if (parameters != null)
                    adapter.SelectCommand.Parameters.AddRange(parameters);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                return ds;
            }
        }

        public object QueryValueSql(string sql, params SqlParameter[] parameters)
        {
            using (SQLiteCommand cmd = new SQLiteCommand(sql)){
                if (parameters != null)
                    cmd.Parameters.AddRange(parameters);
                return ExecuteScalar(cmd);
            }
        }

        public int UpdateDataTableSql(DataTable table, string tableName)
        {
            string sql = string.Format("select top 0 * from {0}", tableName);
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbPath + ";"))
            {
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);
                SQLiteCommandBuilder cmdBuilder = new SQLiteCommandBuilder(adapter);
                adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
                adapter.InsertCommand = cmdBuilder.GetInsertCommand();
                adapter.DeleteCommand = cmdBuilder.GetDeleteCommand();
                return adapter.Update(table);
            }
        }

        public int UpdateDataSetSql(DataSet ds, string tableName)
        {
            string sql = string.Format("select top 0 * from {0}", tableName);
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbPath + ";"))
            {
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);
                SQLiteCommandBuilder cmdBuilder = new SQLiteCommandBuilder(adapter);
                adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
                adapter.InsertCommand = cmdBuilder.GetInsertCommand();
                adapter.DeleteCommand = cmdBuilder.GetDeleteCommand();
                return adapter.Update(ds);
            }
        }
    }
}
  1. 调用SQLiteHelper类
    调用SQLiteHelper类需要其他程序集引用此类。程序中创建SQLiteHelper实例后,调用SQLiteHelper提供的方法实现SQLite的数据操作。
public partial class Form1 : Form
{
    SQLiteHelper.SQLiteHelper sqliteHelper;

    public Form1()
    {
        InitializeComponent();
        string dbPath = @"D:\test.db";
        sqliteHelper = new SQLiteHelper.SQLiteHelper(dbPath);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string sql = "select * from tb_user";
        DataTable dt = sqliteHelper.QueryDataTableSql(sql, null);
        dataGridView1.DataSource = dt;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        string sql = "insert into tb_user(id,name,age) values (@id,@name,@age)";
        SQLiteParameter[] parameters = new SQLiteParameter[]{
            new SQLiteParameter("@id","20180316001"),
            new SQLiteParameter("@name","Lucy"),
            new SQLiteParameter("@age",21)
        };
        int result = sqliteHelper.ExecuteNonQuerySql(sql, parameters);
        if (result > 0)
        {
            MessageBox.Show("添加成功!");
        }
        else
        {
            MessageBox.Show("添加失败!");
        }
    }
}

三、示例说明
我们在项目中使用SQLite数据库时,只需引用SQLiteHelper类库,以及在需要操作SQLite数据库的类中创建SQLiteHelper对象,即可调用SQLiteHelper的方法,轻松实现数据的操作。下面给出两个示例。

  1. 查询表数据并显示在DataGridView中。
private void button1_Click(object sender, EventArgs e)
{
    string dbPath = @"D:\test.db";
    SQLiteHelper.SQLiteHelper sqliteHelper = new SQLiteHelper.SQLiteHelper(dbPath);
    string sql = "select * from tb_user";
    DataTable dt = sqliteHelper.QueryDataTableSql(sql, null);
    dataGridView1.DataSource = dt;
}
  1. 插入记录至表中并给出提示信息。
private void button2_Click(object sender, EventArgs e)
{
    string dbPath = @"D:\test.db";
    SQLiteHelper.SQLiteHelper sqliteHelper = new SQLiteHelper.SQLiteHelper(dbPath);
    string sql = "insert into tb_user(id,name,age) values (@id,@name,@age)";
    SQLiteParameter[] parameters = new SQLiteParameter[]{
        new SQLiteParameter("@id","20180316001"),
        new SQLiteParameter("@name","Lucy"),
        new SQLiteParameter("@age",21)
    };
    int result = sqliteHelper.ExecuteNonQuerySql(sql, parameters);
    if (result > 0)
    {
        MessageBox.Show("添加成功!");
    }
    else
    {
        MessageBox.Show("添加失败!");
    }
}

以上两个示例中,我们都是在SQLiteHelper.SQLiteHelper类构造函数中传入了数据库文件的路径,将SQLiteHelper对象实例化后,就能轻松地对数据库进行操作。其中,示例一是查询表数据,示例二是插入记录操作。按需调用SQLiteHelper提供的其他方法即可完成相应的数据操作工作。

四、总结
通过我们的实践,我们发现,使用SQLiteHelper类库实现对SQLite数据库的操作十分便捷,是一个很好的SQLite数据库操作类库。通过SQLiteHelper的封装,我们能够很方便地实现对SQLite数据库的增、删、改、查等常规操作。此外,SQLiteHelper还支持Linq to sqlite语法,让我们更加轻松地处理数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#中调用命令行cmd开启wifi热点的实例代码

    在C#中调用命令行(cmd)可以通过System.Diagnostics.Process类来实现,该类代表一个外部进程,并且可以启动、停止、监视和与进程进行交互。 下面是实现开启WiFi热点的C#代码: Process process = new Process(); process.StartInfo.FileName = "cmd.exe&qu…

    C# 2023年6月7日
    00
  • Net Core全局配置读取管理方法ConfigurationManager

    在本文中,我们将详细讲解如何在.NET Core中使用ConfigurationManager全局配置读取管理方法,并提供两个示例说明。 准备工作 在开始之前,您需要安装以下软件: .NET Core SDK 使用ConfigurationManager读取配置 在.NET Core项目中添加System.Configuration.Configuratio…

    C# 2023年5月16日
    00
  • .net core利用PdfSharpCore操作PDF实例教程

    以下是关于“.NET Core 利用 PdfSharpCore 操作 PDF 实例教程”的完整攻略: 1. 准备工作 在使用 PdfSharpCore 操作 PDF 之前,进行准备工作: 安装 .NET Core SDK。 安装 PdfSharpCore NuGet 包。 2. 创建 PDF 文件 要创建 PDF 文件,可以使用 PdfSharpCore 库…

    C# 2023年5月12日
    00
  • c#使用xamarin编写拨打电话程序

    很好,下面我来详细讲解一下“c#使用xamarin编写拨打电话程序”的完整攻略。 1. 环境搭建 首先,在开始编写程序前,需要先搭建好环境。我们可以在Visual Studio中使用Xamarin进行开发。在安装 Visual Studio 时选择安装移动开发选项以及Xamarin的组件,或者在已安装的Visual Studio中通过安装工具添加Xamari…

    C# 2023年6月3日
    00
  • C#中如何利用正则表达式判断字符

    下面是关于 C# 中利用正则表达式判断字符的攻略: 判断单个字符是否匹配正则表达式 在 C# 中,可以利用 Regex.IsMatch() 函数来判断一个字符串是否匹配某个正则表达式。如果需要判断单个字符是否符合正则表达式,需要先将该字符转换为字符串,然后再调用 Regex.IsMatch() 进行判断。示例如下: char c = ‘A’; // 需要判断…

    C# 2023年6月6日
    00
  • C# 7.0中解构功能详解

    C# 7.0中解构功能详解 在C# 7.0中,引入了解构功能。该功能能够让开发人员从复杂的数据结构中分离出各个变量,使得数据变得更加易于操作。本文将全面讲解解构的相关知识,包括什么是解构、如何使用解构、解构的语法和两个示例说明。 什么是解构? 解构是指将一个大型的数据结构破解成一堆小型变量的过程。换言之,当我们需要操作较大、复杂的数据结构时,我们可以通过解构…

    C# 2023年6月1日
    00
  • SQL Server LocalDB 在 ASP.NET中的应用介绍

    SQL Server LocalDB是一种轻量级版本的SQL Server数据库引擎,它可以在本地计算机上运行,不需要安装完整的SQL Server数据库引擎。在ASP.NET应用程序中,可以使用SQL Server LocalDB来存储和管理数据。本文将介绍如何在ASP.NET中使用SQL Server LocalDB,包括创建数据库、创建表、插入数据、查…

    C# 2023年5月15日
    00
  • C#中的var关键字用法介绍

    C#中的var关键字用法介绍 一、var关键字的作用 C#中的var关键字允许我们在编译时推断出变量的类型,并在必要时进行转换。使用var关键字可以大大简化代码,提高可读性和编程效率。 二、var关键字的使用方法 1. 声明变量时使用var关键字 var关键字可以用来声明各种类型的变量,包括整型、浮点型、字符串型、数组等。 示例1:声明一个整型变量 var …

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部