C#中使用SQLite、正则表达式
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?
- 不需要一个单独的服务器进程或操作的系统(无服务器的)。
- SQLite 不需要配置,这意味着不需要安装或管理。
- SQLite 是非常小的,是轻量级的。
- SQLite 是自给自足的,这意味着不需要任何外部的依赖。
- SQLite 跨平台,可支持在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。
SQLite两种使用方式:
- 命令行工具,需要安装SQLite,
SQLite安装教程:https://developer.aliyun.com/article/1350069
- 使用图形化管理工具,需要安装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();
}
}
}
}
更多推荐
所有评论(0)