当前位置: 首页 > news >正文

C#结合SQLite数据库使用方法

一、关于SQLite

SQLite 是一个轻量级的嵌入式关系型数据库管理系统(RDBMS)。与传统的数据库管理系统(如 MySQL、PostgreSQL 或 SQL Server)不同,SQLite 并不需要运行单独的服务器进程,它的数据库存储在一个单一的文件中,因此被称为“嵌入式数据库”。SQLite 常常用于需要小型、快速且无需复杂配置的应用场景。

 SQLite的特点:

1. 轻量级:

   SQLite 是一个非常小的数据库引擎,源代码可以轻松集成到各种应用程序中,适合嵌入式系统和移动应用。其核心库的大小通常只有几百 KB。

2. 零配置:

   与传统的数据库管理系统不同,SQLite 不需要配置服务器、网络连接或管理员权限。它直接通过文件系统进行操作,创建一个单一的数据库文件来存储所有数据。

3. 跨平台支持:

   SQLite 是跨平台的,可以在几乎所有操作系统上运行,包括 Windows、Linux、macOS、iOS、Android 等。它使得开发者能够在不同平台间共享数据。

4. 文件存储:

   所有的数据存储都在一个单一的文件中,这个文件通常很容易复制、备份和移动。

5. 支持标准SQL:

   SQLite 支持 SQL-92 标准的大部分功能,包括查询、事务、触发器、索引等功能,使得开发者可以使用熟悉的 SQL 语法进行数据操作。

6. 事务性:

   SQLite 支持事务,能够确保数据库的操作具有原子性、持久性、一致性和隔离性(ACID 特性)。即使在应用程序崩溃或断电的情况下,数据也能够保持一致性。

7. 无服务器:

   SQLite 是一个无服务器数据库,它直接嵌入到应用程序中。它不需要启动独立的数据库服务器进程,因此启动速度快,资源消耗小。

 使用场景:

1. 移动应用:

   因为 SQLite 轻便且不需要复杂配置,它非常适合用于移动设备(如 Android 和 iOS)的数据存储。

2. 桌面应用:

   在小型桌面应用中,SQLite 是一种理想的数据库解决方案,尤其是那些不需要多个并发用户的应用。

3. Web应用:

   SQLite 也可以作为一些中小型网站的后端数据库,尤其是在开发阶段或低流量的网站中。

4. 物联网(IoT)设备:

   SQLite 常被用在物联网设备中,作为嵌入式数据库存储数据。

 总结:

SQLite 由于其高效、简单、零配置、跨平台的特性,在许多应用场景中都得到了广泛的应用。它对于开发者来说是一款非常方便的工具,尤其适用于嵌入式系统、桌面软件、移动应用等不需要复杂数据库系统的场合。
 

二、常用的sql语句(CRUD)

*. 创建一个新的数据库表

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 自动递增的ID
    name TEXT NOT NULL,                    -- 用户名
    age INTEGER NOT NULL                   -- 年龄
);

1. 给数据库中添加数据

### 插入数据

INSERT INTO "表名" (字段1,字段2,字段3...) VALUES(值1,值2,值3...);

### 插入多条数据

INSERT INTO "表名" (字段1,字段2,字段3...) VALUES(值1,值2,值3...),(值1,值2,值3...);

2. 删除数据库中的数据

### 删除特定数据,示例

DELETE FROM users WHERE id = 1;
### 删除所有数据

DELETE FROM users;

3. 查找数据

### 查询所有数据

SELECT * FROM users;
### 查询特定列的数据

SELECT name, age FROM users;
### 查询符合条件的数据

SELECT * FROM users WHERE age > 30;
### 查询单挑数据

SELECT * FROM users WHERE id = 1;

4. 更新数据 

### 更新数据库中某个字段的值为某个值

UPDATE users SET age = 26 WHERE id = 1;

三、用C#代码封装SQLite数据库的各个方法实现增删改查

C#连接SQLite数据库实现增删改查

namespace DB
{public class DataBase{private readonly string _connectionString;// 数据库文件位置private static readonly string databasePath = @"数据库文件路径"; public DataBase(){_connectionString = $"Data Source={databasePath};Version=3;";}/// <summary>/// 打开数据库连接/// </summary>/// <returns>SQLiteConnection 对象</returns>private SQLiteConnection OpenConnection(){var connection = new SQLiteConnection(_connectionString);connection.Open();return connection;}/// <summary>/// 通用方法:执行非查询命令(增、删、改)/// </summary>/// <param name="query">SQL 查询语句</param>/// <param name="parameters">查询参数</param>/// <returns>受影响的行数</returns>public int ExecuteNonQuery(string query, Dictionary<string, object> parameters = null){using var connection = OpenConnection();using var command = new SQLiteCommand(query, connection);// 添加参数if (parameters != null){foreach (var param in parameters){command.Parameters.AddWithValue(param.Key, param.Value);}}return command.ExecuteNonQuery();}/// <summary>/// 通用方法:执行查询并返回结果/// </summary>/// <param name="query">SQL 查询语句</param>/// <param name="parameters">查询参数</param>/// <returns>查询结果 DataTable</returns>public DataTable ExecuteQuery(string query, Dictionary<string, object> parameters = null){using var connection = OpenConnection();using var command = new SQLiteCommand(query, connection);// 添加参数if (parameters != null){foreach (var param in parameters){command.Parameters.AddWithValue(param.Key, param.Value);}}using (var adapter = new SQLiteDataAdapter(command)){var dataTable = new DataTable();adapter.Fill(dataTable);return dataTable;}}/// <summary>/// 增加方法/// </summary>/// <param name="tableName"></param>/// <param name="data"></param>public void Insert(string tableName, Dictionary<string, object> data){var columns = string.Join(", ", data.Keys);var placeholders = string.Join(", ", data.Keys.Select(key => "@" + key));var query = $"INSERT INTO {tableName} ({columns}) VALUES ({placeholders})";            ExecuteNonQuery(query, data);}/// <summary>/// 删除方法/// </summary>/// <param name="tableName"></param>/// <param name="whereClause"></param>/// <param name="parameters"></param>public void Delete(string tableName, string whereClause, Dictionary<string, object> parameters){var query = $"DELETE FROM {tableName} WHERE {whereClause}";ExecuteNonQuery(query, parameters);}/// <summary>/// 查询方法/// </summary>/// <param name="tableName"></param>/// <param name="whereClause"></param>/// <param name="parameters"></param>/// <returns></returns>public DataTable Select(string tableName, string whereClause = null, Dictionary<string, object> parameters = null){var query = $"SELECT * FROM {tableName}";if (!string.IsNullOrEmpty(whereClause)){query += $" WHERE {whereClause}";}return ExecuteQuery(query, parameters);}/// <summary>/// 更新方法/// </summary>/// <param name="tableName"></param>/// <param name="data"></param>/// <param name="whereClause"></param>/// <param name="parameters"></param>public void Update(string tableName, Dictionary<string, object> data, string whereClause, Dictionary<string, object> parameters){// var setClause = string.Join(", ", data.Keys, key => $"{key} = @{key}");var setClause = string.Join(", ", data.Keys.Select(key => $"{key} = @{key}"));var query = $"UPDATE {tableName} SET {setClause} WHERE {whereClause}";// 合并参数if (parameters == null){parameters = new Dictionary<string, object>();}foreach (var param in data){parameters[$"@{param.Key}"] = param.Value;}ExecuteNonQuery(query, parameters);}}
}

创建数据库对象,并进行调用增删查改方法

创建数据库对象

private static readonly DB sqlite = new();

添加数据

给数据库中所有非null值进行赋值。

sqlite.Insert("tabel", new Dictionary<string, object> {{"createTime",DateTime.Now },{ "age",18},{ "name","Peter"},
});

删除数据

删除表中字段为name,并且name为Peter的一条数据。

sqlite.Delete("tabel", "name = @name", new Dictionary<string, object> { { "@name","Peter"  } 
});

查找数据

查找表中的name字段为Peter的全部信息

sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{{"name","Peter" }
});

更新数据

将数据库中name字段为Peter的数据中的age字段改为25.

sqlite.Update(new Dictionary<string, object> { { "age", 25 } },"name = @name",new Dictionary<string, object>{ { "@name","Peter"}
});

四、获取数据库中查询得到的全部数据

查询返回的数据类型为DataTable类型。

DataTable dataTable = sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{{"name","Peter" }
});
foreach (DataRow row in dataTable.Rows)
{Console.WriteLine(row["createTime"]);Console.WriteLine(row["age"]);Console.WriteLine(row["name"]);
}

查询当前条件在数据库中是否有匹配的内容。

DataTable dataTable = sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{{"name","Peter" }
});
if(dataTable.Rows.Count==0) Console.WriteLine("在数据库中没有找到指定内容");


http://www.mrgr.cn/news/97488.html

相关文章:

  • C++11实现一个自旋锁
  • 压测工具开发实战篇(四)——client子窗口功能
  • 本地大模型构建个人知识库(Ragflow)
  • 屏幕空间反射SSR-笔记
  • 【C++】Chapter04<STL部分>:STL标准模板库概要
  • Python数据爬取
  • 从搜索丝滑过渡到动态规划的学习指南
  • 测开八股收集
  • 3D激光轮廓仪知识整理(待补充)
  • 代码随想录算法训练营第十一天
  • 2025-04-07 NO.3 Quest3 MR 配置
  • 《从零搭建Vue3项目实战》(AI辅助搭建Vue3+ElemntPlus后台管理项目)零基础入门系列第二篇:项目创建和初始化
  • RAG中构建个人知识库
  • Python高级爬虫之JS逆向+安卓逆向1.2节: 变量与对象
  • 从传递函数到PID控制器
  • C++20 统一容器擦除:std::erase 和 std::erase_if
  • nacos集群启动问题
  • 2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
  • 【Vue】选项卡案例——NBA新闻
  • Linux学习笔记(1) 目录结构与路径描述:对比 Windows 系统差异(期末,期中复习笔记全)