SQLite教程:


https://www.runoob.com/sqlite/sqlite-tutorial.html

SQLite官方下载地址:


https://www.sqlite.org/download.html

SQLite官方教程:


https://www.sqlite.org/docs.html

可视化工具DB Browser下载地址:


https://sqlitebrowser.org/dl/

可视图工具visualdb下载地址:


https://visualdb.com/sqlite/

什么是 SQLite?

SQLite是一个进程内的数据库,实现了自给自足的无服务器的零配置的事务性的轻量级的跨平台的关系型数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。

为什么要用 SQLite?

  1. 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  2. SQLite 不需要配置,这意味着不需要安装或管理。
  3. SQLite 是非常小的,是轻量级的。
  4. SQLite 是自给自足的,这意味着不需要任何外部的依赖。
  5. SQLite 跨平台,可支持在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

SQLite两种使用方式:

  1. 命令行工具,需要安装SQLite,

SQLite安装教程:https://developer.aliyun.com/article/1350069

  1. 使用图形化管理工具,需要安装DB Browser,

DB Browser安装教程:https://developer.aliyun.com/article/1725696

提示:两种方式使用一种就可以,不需要全部安装,新手推荐使用图形化工具。

新手安装完DB Browser之后,不需要再安装SQLite了,直接用图形化工具去操作SQLite即可!

学习使用DB Browser如何创建表,视图,索引等,增删查改语句基本和SQLServer相同。

SQLite数据库图形化管理工具:

工具名称

价格

核心优势

推荐指数

DB Browser

免费开源

简单、经典、社区活跃

⭐⭐⭐⭐⭐

SQLiteStudio

免费开源

绿色便携、支持插件、跨库查询

⭐⭐⭐⭐

SQLite Expert

免费版/收费

可视化查询构建器、专业设计

⭐⭐⭐⭐

DBeaver

免费开源

全能型、支持多数据库

⭐⭐⭐⭐

Navicat

收费

界面美观、数据同步强大

⭐⭐⭐

C#中应用SQLite

在C#中使用SQLite数据库是一种常见做法,特别是在开发桌面应用程序或者小型服务端应用程序时。SQLite是一个轻量级的数据库,它不需要一个独立的服务器进程,这使得它在资源受限的环境中非常有用。在C#中操作SQLite数据库,你可以使用一些流行的库,比如System.Data.SQLite或Microsoft.Data.Sqlite。其中.NET Framework项目中使用System.Data.SQLite,.NET Core项目中使用Microsoft.Data.Sqlite。

以下是使用这两种库的基本步骤:

使用System.Data.SQLite(推荐用于.NET Framework)

在你的C#项目中,你需要安装System.Data.SQLite的NuGet包。你可以通过Visual Studio的NuGet包管理器来安装,或者使用以下命令:

Install-Package System.Data.SQLite

只安装上面的会异常:System.DllNotFoundException:“无法加载 DLL“e_sqlite3”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

还需要安装:

Install-Package SourceGear.sqlite3

并设置x64平台运行项目,才能在C# .NET Framework项目中使用SQLite

1.‌创建数据库连接‌

创建一个连接到SQLite数据库的连接字符串,然后使用这个字符串创建一个SqliteConnection对象。

using System;

using System.Data.SQLite;

class Program

{

    static void Main()

    {

        // 创建连接字符串,指定数据库文件路径

        string connectionString = "Data Source=yourDatabasePath.db;Version=3;";

        using (var connection = new SQLiteConnection(connectionString))

        {

            connection.Open(); // 打开连接

            // 在这里执行SQL命令...

            connection.Close(); // 关闭连接

        }

    }

}

​​​​​​​2.‌执行SQL命令

使用SqliteCommand来执行SQL命令,比如插入、查询、更新或删除数据。

string query = "SELECT * FROM yourTable";

using (var command = new SQLiteCommand(query, connection))

{

    using (var reader = command.ExecuteReader())

    {

        while (reader.Read())

        {

            Console.WriteLine(reader["columnName"].ToString()); // 输出查询结果

        }

    }

}

使用Microsoft.Data.Sqlite (推荐用于.NET Core和.NET 5/6)

在你的C#项目中,安装Microsoft.Data.Sqlite的NuGet包。你可以通过Visual Studio的NuGet包管理器来安装,或者使用以下命令:

Install-Package Microsoft.Data.Sqlite

​​​​​​​1.‌创建数据库连接

创建一个连接到SQLite数据库的连接字符串,然后使用这个字符串创建一个SqliteConnection对象。

using System;

using Microsoft.Data.Sqlite;

class Program

{

    static void Main()

    {

        // 创建连接字符串,指定数据库文件路径

        string connectionString = "Data Source=yourDatabasePath.db";

        using (var connection = new SqliteConnection(connectionString))

        {

            connection.Open(); // 打开连接

            // 在这里执行SQL命令...

            connection.Close(); // 关闭连接

        }

    }

}

​​​​​​​2.执行SQL命令‌与上面类似,使用SqliteCommand来执行SQL命令。

总结

选择哪个库取决于你的项目类型和目标框架。对于传统的.NET Framework项目,System.Data.SQLite是更常见的选择。而对于新的.NET Core或.NET 5/6项目,推荐使用Microsoft.Data.Sqlite,因为它提供了更好的性能和与现代.NET平台的集成。不论选择哪个库,基本的操作步骤都是类似的:创建连接、打开连接、执行SQL命令、处理结果、关闭连接。

学习方法:
对比SQLServer大型关系型数据库来学习。

正则表达式教程:https://www.runoob.com/regexp/regexp-tutorial.html

正则表达式总结:


常用元字符:
+ 号代表前面的字符必须至少出现一次(1 次或多次)
*  号代表前面的字符可以出现一次或者多次(0 次、或 1 次、或多次)
?  号代表前面的字符最多只可以出现一次(0 次或 1 次)

^匹配以XX开头,或取反
$匹配以XX结尾
[ ]匹配字符集合
( )表示组
{n,m}匹配n到m次
| (竖线)表示"或"关系

[A-Z] 表示一个区间,匹配所有大写字母;
[a-z] 匹配所有小写字母;
[0-9] 匹配所有数字。

\d 匹配任意一个阿拉伯数字(0 到 9),等价于 [0-9]。
\D 匹配非数字,等价于 ^[0-9]。

\w 匹配字母、数字、下划线,等价于 [A-Za-z0-9_]。
\W 匹配非字母,数字,下划线,等价于 ^[A-Za-z0-9_]。

\s 匹配所有空白符(包括换行)
\S 匹配所有非空白符(不包括换行)

\s\S 两者合并即可匹配任意字符。

正则表达式常用修饰符:掌握i和g,其他了解
 

C#vs中应用SQLite  与  正则

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SQLite;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        string connString = "Data Source=test.db;Version=3;";
        int page = 1;
        int pageSize = 2;
        int totalPage = 0;
        public Form1()
        {
            InitializeComponent();
        }

        // 
        private void button1_Click(object sender, EventArgs e)
        {
            // Regex正则表达式对象, 命名空间System.Text.RegularExpressions
            // 构造函数参数为正则表达式字符串。pattern模式,规划,匹配模式
            //Regex reg = new Regex("[0-9]");// 匹配数字
            //Regex reg = new Regex("[^0-9]");// 匹配非数字
            //Regex reg = new Regex("^[0-9]"); // 匹配开头为数字
            //Regex reg = new Regex("[0-9]$"); // 匹配结尾为数字
            //Regex reg = new Regex("^[0-9]$"); // 匹配开头结尾为数字
            //Regex reg = new Regex("^[0-9a-zA-Z]+$"); // + >=1
            //Regex reg = new Regex("^[0-9a-zA-Z]?$"); // ? 0次或1次
            //Regex reg = new Regex("^[0-9a-zA-Z]*$"); // * >=0
            //Regex reg = new Regex("^(abc)[a-z]*$"); // * >=0
            //Regex reg = new Regex("^[0-9]{4,6}$"); // 数字4-6位
            //Regex reg = new Regex("^[\\d]{4,6}$"); // 数字4-6位
            //Regex reg = new Regex("^[\\D]{4,6}$"); // 非数字4-6位
            //Regex reg = new Regex("^[\\w]{4,6}$"); // 字母,数字,下划线,4-6位
            //Regex reg = new Regex("^[\\W]{4,6}$"); // 字母,数字,下划线,4-6位
            //Regex reg = new Regex("^[\\s\\S]{4,6}$"); // 任意字符,4-6位
            Regex reg = new Regex("^[a-z]{4,6}$", RegexOptions.IgnoreCase); // 小写字母,4-6位  ignore

            // IsMatch()方法 ******, Match()或Matches()方法, Split()方法
            bool result = reg.IsMatch(textBox1.Text);
            MessageBox.Show(result.ToString());
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            BindDataGridView();
        }

        // NuGet 安装 System.Data.SQLite 库后,发现运行就报错:System.DllNotFoundException:“无法加载 DLL“e_sqlite3”: 找不到指定的模块。
        // https://www.jb51.net/database/3525158t6.htm
        private void BindDataGridView()
        {
            using (var conn = new SQLiteConnection(connString))
            {
                conn.Open(); // 打开连接
                string sql = "SELECT * FROM [Student]";
                string sql2 = "select count(*) from [Student]";
                if (!string.IsNullOrWhiteSpace(textBox2.Text))
                {
                    sql += " WHERE StudentName like '%" + textBox2.Text + "%'";
                    sql2 += " WHERE StudentName like '%" + textBox2.Text + "%'";

                }
                sql += $" ORDER BY StudentID DESC limit {pageSize} offset {(page - 1) * pageSize};";
                string allsql = sql + sql2;
                using (var command = new SQLiteCommand(allsql, conn))
                {
                    DataSet ds = new DataSet();
                    SQLiteDataAdapter da = new SQLiteDataAdapter(command);
                    da.Fill(ds);

                    int totalCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
                    totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;

                    label1.Text = $"第{page}页/共{totalPage}页";

                    dataGridView1.DataSource = ds.Tables[0];
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            using (var conn = new SQLiteConnection(connString))
            {
                conn.Open(); // 打开连接
                string sql = "insert into Student(StudentName,Age,Photo,Score) values (@StudentName,@Age,@Photo,@Score)";
                SQLiteParameter[] parameters = new SQLiteParameter[] {
                    new SQLiteParameter("@StudentName","XXX"),
                    new SQLiteParameter("@Age",20),
                    new SQLiteParameter("@Photo",DBNull.Value),
                    new SQLiteParameter("@Score",99.99),
                };
                using (var cmd = new SQLiteCommand(sql, conn))
                {
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddRange(parameters);
                    cmd.ExecuteNonQuery();
                }
            }

            BindDataGridView();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            page = 1;
            BindDataGridView();
        }

        private void btnFirst_Click(object sender, EventArgs e)
        {
            if (page != 1)
            {
                page = 1;
                BindDataGridView();
            }
        }

        private void btnPrev_Click(object sender, EventArgs e)
        {
            if (page > 1)
            {
                page--;
                BindDataGridView();
            }
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            if (page < totalPage)
            {
                page++;
                BindDataGridView();
            }
        }

        private void btnLast_Click(object sender, EventArgs e)
        {
            if (page != totalPage)
            {
                page = totalPage;
                BindDataGridView();
            }
        }
    }
}

更多推荐