墨山箐
发布于 2025-05-04 / 8 阅读
0
0

SQLite

SQLite

什么是

​ 一个轻量级的嵌入式关系型数据库管理系统.

基本特性

  • 嵌入式数据库 : 不需要单独的服务器进程数据库直接存储在单个磁盘文件中
  • 零配置 :无需安装或管理直接使用
  • 跨平台:支持所有主流操作系统
  • 单文件数据库:整个数据库存储在一个单独的文件中,便于携带和备份

技术特点

  • 支持标准的SQL语法
  • 事务处理
  • 支持最大140TB的数据库
  • 自包含
  • 公共领域开源

应用场景

  • 移动应用
  • 桌面应用程序
  • 嵌入式设备物联网
  • 小型网站
  • 应用程序本地缓存

在C#中使用SQLite

安装SQLite

​ 通过NuGet安装SQLite

ash

Install-Package SYstem.Data.SQLite

基本数据操作

创建数据库和连接

using System.Data.SQLite //引用库
    
//创建或连接到数据库(如不存在会自动创建)
string connectionString = "Data Source = mydatabase.db;Version = 3;";
SQLiteConnection Connection = new SQLiteConnection(connectString);

try
{
    connection.Open();//连接数据库
    //数据库操作...
}
finally
{
    connection.Close();//断开数据库
}

创建表

 /*	@: 表示是一个逐字字符串,可以跨多行且不需要转义 "\n"
   create TABLE if not exists : sql语句 如果不存在则创建表
	Users 是名
	表的结构定义:
		id 字段名; integer : 整数类型; primary key : 设为主键;autoincrement : 自动递增;
		name 字段名; text : 文本类型 ; not null : 不能为空.
		email 字段名 ; unique : 列值唯一.
		age 字段名 ; integer 整数类型;没有约束,可空可重复.
*/
string createTableSql = @"   						
	CREATE TABLE IF NOT EXISTS Users(
	Id INTEGER PRIMARY KEY AUTOINCREMENT,
     Name TEXT NOT NULL,
     Email TEXT UNIQUE NOT NULL,
     Age INTEGER
		)";
//using作用:确保命令对象会被正确释放	
using (SQLiteCommand command = new SQLitecommand(creatTableSql,connection))  //创建command对象,传入sql语句和数据库连接
{	//执行不返回结果的sql命令(create,Install,update等)
	command.ExecuteNonQuery();   
}

CRUD操作

插入数据

// 创建sql语句:  insert 插入; into users :指向 users表; (...)指定的列名;values(...)使用参数化查询值;
string insertsql = "INSERT INTO Users(Name,Email,Age) VALUES (@name,@emil,@age)";

//创建command对象,关联sql语句和数据库连接
using (SQLiteCommand command = new SQLiteCommand(insertSql, connection))
{
    //添加参数值,参数化查询,可以放置SQL注入
    command.Parameters.AddWithValue("@name","张三");
    command.Parameters.AddWithValue("@email","WJ@WJcode.cn");
    command.Parameters.AddWithValue("@age","18");
    //执行命令并获取结果
    int rowsAffected = command.ExecuteNonQuery();  //执行不返回结果集的sql命令
    //输出到控制台
    Console.WriteLine($"插入了 {rowsAffected} 行数据")
}

查询数据

//创建sql语句 : select 查询; * from Users 指定 *(表示所有)数据库的表 where age 如果 age字段名 > 传入的值
string querySql = "SELECT * FROM Users WHERE Age > @minAge";
//创建对象,关联SQL语句和数据库连接
using (SQLiteCommand command = new SQLiteCommand (querySql, connection))
{	
    //设置查询参数
    command.Parameters.AddWithValue("@minAge",17);
    //执行查询结果并返回结果集到 DateReader对象
    using (SQLiteDataReader reader = command.EXecuteReader())
    {	//遍历结果ji
        while (reader.Read())
        {
            Console.WriteLine($"ID:{reader["id"]},姓名:{reader["Name"]},邮箱:{reader["Email"]},年龄:{reader["Age"]}")
        }
    }
}

更改数据

//创建sql语句  :  UPDATE Users更新表 set age 设置age字段 ; @newage where name 新age值放到 name字段等于 外部指定字列 
string updateSql = "UPDATE Users SET Age = @newAge WHERE Name = @name";
//创建对象,关联sql语句和数据库连接
using (SQLiteCommand command = new SQLiteCommand(updateSql,connection))
{
    //设置更新参数
    command.Parameters.AddWithValue("@newAge",21);
    //设置条件参数
    command.Parameters.AddWithValue("@name","zhangsan");
    //执行不返回结果集的方法
    int rowsAffected = command.ExecuteNoeQuery();
    Console.WriteLine($"更新了 {rowsAffected} 行数据");
}

删除数据

//创建sql语句: delete 删除 from users 来自users表; where id  = ..   指定id =.. 外部输入的条件
string deleteSql = "DELETE FROM Users WHERE Id = @id";
//创建对象,关联sql语句和数据库连接
using (SQLiteCommand command = new SQLiteCommand(deleteSql, connection))
{
    //设置删除条件参数
    command.Parameters.AddWithValue("@id", 1);
    //执行不返回结果集的方法
    int rowsAffected = command.ExecuteNonQuery();
    Console.WriteLine($"删除了 {rowsAffected} 行数据");
}

注意事项

  • 创建数据库指定好路径
  • 不区分大小写
  • 字段名避免和关键字一样,可以添加前后缀
  • 在sql中一般用 下划线 来命名

使用更高效操作

Dapper

​ Dapper 是一款轻量级的 ORM(对象关系映射)工具,适用于小型项目。相比于 Entity Framework 和 NHibernate 这些重量级的 ORM 工具,Dapper 更为简洁高效

Install-Package Dapper

Entity Framework Core

Entity Framework Core(简称EF Core) 是.NET Core中的ORM(object relational mapping,对象关系映射) 框架。它可以让开发者面向对象的方式进行数据库操作。

https://learn.microsoft.com/zh-cn/ef/core/

sqlite-net

​ 是一个开源的轻量级 .NET SQLite 数据访问库,适用于 .NET、.NET Core 和 Mono 应用。该库提供简单的 CRUD 操作和查询方法,支持同步和异步 API,通过反射机制实现 ORM 功能。sqlite-net 兼容多种 .NET 平台,如 Xamarin、UWP 和 Azure,为开发者提供高效的数据库访问解决方案。

https://github.com/praeclarum/sqlite-net/wiki

补充说明

​ 更多操作请点击→ SQLite中文手册


评论