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

C# Sqlite帮助类

在 .NET Framework 4.8 中,推荐使用 System.Data.SQLite(由 SQLite.org 官方维护的 ADO.NET 提供程序),而不是 Microsoft.Data.Sqlite(后者主要用于 .NET Core / .NET 5+)。

下面是一个适用于 .NET Framework 4.8同步方式SqliteHelper 类,基于 System.Data.SQLite


✅ 第一步:安装 NuGet 包

在 Visual Studio 的包管理器控制台中运行:

Install-Package System.Data.SQLite.Core

注意:不要安装 System.Data.SQLite(带设计时组件的完整版),除非你需要 VS 设计器支持。System.Data.SQLite.Core 是纯运行时依赖,更轻量。


📦 引用命名空间

using System;
using System.Data;
using System.Collections.Generic;
using System.Data.SQLite;

🧩 SqliteHelper 类(.NET 4.8 同步版本)

public static class SqliteHelper
{private static string _connectionString;/// <summary>/// 初始化连接字符串/// </summary>/// <param name="connectionString">例如:"Data Source=app.db;Version=3;"</param>public static void Initialize(string connectionString){if (string.IsNullOrEmpty(connectionString))throw new ArgumentException("连接字符串不能为空", nameof(connectionString));_connectionString = connectionString;}/// <summary>/// 执行非查询命令(INSERT, UPDATE, DELETE)/// </summary>public static int ExecuteNonQuery(string sql, params SQLiteParameter[] parameters){using (var connection = new SQLiteConnection(_connectionString)){connection.Open();using (var command = new SQLiteCommand(sql, connection)){if (parameters != null)command.Parameters.AddRange(parameters);return command.ExecuteNonQuery();}}}/// <summary>/// 执行标量查询(返回第一行第一列)/// </summary>public static object ExecuteScalar(string sql, params SQLiteParameter[] parameters){using (var connection = new SQLiteConnection(_connectionString)){connection.Open();using (var command = new SQLiteCommand(sql, connection)){if (parameters != null)command.Parameters.AddRange(parameters);return command.ExecuteScalar();}}}/// <summary>/// 执行查询并返回 DataTable/// </summary>public static DataTable ExecuteDataTable(string sql, params SQLiteParameter[] parameters){using (var connection = new SQLiteConnection(_connectionString)){using (var adapter = new SQLiteDataAdapter(sql, connection)){if (parameters != null){adapter.SelectCommand = new SQLiteCommand(sql, connection);adapter.SelectCommand.Parameters.AddRange(parameters);}var table = new DataTable();adapter.Fill(table);return table;}}}/// <summary>/// 执行查询并返回 List&lt;Dictionary&lt;string, object&gt;&gt;/// </summary>public static List<Dictionary<string, object>> ExecuteQuery(string sql, params SQLiteParameter[] parameters){var results = new List<Dictionary<string, object>>();using (var connection = new SQLiteConnection(_connectionString)){connection.Open();using (var command = new SQLiteCommand(sql, connection)){if (parameters != null)command.Parameters.AddRange(parameters);using (var reader = command.ExecuteReader()){while (reader.Read()){var row = new Dictionary<string, object>();for (int i = 0; i < reader.FieldCount; i++){var columnName = reader.GetName(i);var value = reader.IsDBNull(i) ? null : reader.GetValue(i);row[columnName] = value;}results.Add(row);}}}}return results;}
}

🔧 使用示例

1. 初始化(通常在程序启动时调用一次)

SqliteHelper.Initialize("Data Source=app.db;Version=3;");

如果数据库文件不存在,SQLite 会自动创建。

2. 创建表

SqliteHelper.ExecuteNonQuery(@"CREATE TABLE IF NOT EXISTS Users (Id INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT NOT NULL,Age INTEGER)");

3. 插入数据

var nameParam = new SQLiteParameter("@name", "张三");
var ageParam = new SQLiteParameter("@age", 25);
SqliteHelper.ExecuteNonQuery("INSERT INTO Users (Name, Age) VALUES (@name, @age)",nameParam, ageParam);

4. 查询数据

var users = SqliteHelper.ExecuteQuery("SELECT * FROM Users WHERE Age > @minAge",new SQLiteParameter("@minAge", 18));foreach (var user in users)
{Console.WriteLine($"姓名: {user["Name"]}, 年龄: {user["Age"]}");
}

5. 获取记录数

var count = (long)SqliteHelper.ExecuteScalar("SELECT COUNT(*) FROM Users");
Console.WriteLine($"总用户数: {count}");

⚠️ 注意事项(.NET 4.8 特定)

  • System.Data.SQLite 在 .NET Framework 下需要 x86/x64 本机 DLL(如 SQLite.Interop.dll)。
    安装 System.Data.SQLite.Core NuGet 包后,它会自动将对应平台的 x86x64 文件夹复制到输出目录。
  • 如果你的应用是 AnyCPU,建议设置为 x64x86,避免部署时找不到 Interop DLL。
  • 不要混用 Microsoft.Data.SqliteSystem.Data.SQLite,它们是两个不同的库。

http://www.dtcms.com/a/600604.html

相关文章:

  • 传统方式部署 Hadoop 高可用集群
  • 微软 Win11 经典版 Outlook 曝 BUG,加速 SSD 损耗
  • C++在边缘AI加速中的硬件优化:结合位运算与SIMD提升推理效率
  • 网站开发文档撰写作业牡丹江整站优化
  • QT:ItemView视图控件
  • 让UI完全按屏幕比例变化的方法
  • 结项报告完整版:Apache SeaTunnel 支持 Flink 引擎 Schema Evolution 功能
  • 微服务生态组件之Spring Cloud LoadBalancer详解和源码分析
  • 重庆长寿网站设计公司哪家专业网站跳转微信链接
  • 阿里云域名DNS解析URL转发不支持HTTPS?
  • leetcode 2654. 使数组所有元素变成 1 的最少操作次数 中等
  • AI取名大师 | PM2 部署 Bun.js 应用及配置 Let‘s Encrypt 免费 HTTPS 证书
  • 结项报告完整版 | Apache SeaTunnel支持metalake开发
  • 【cursor】进阶技巧Rules
  • WebServer05
  • 【数据分析-Excel】常用函数汇总
  • 深入理解MySQL事务隔离级别与锁机制(从ACID到MVCC的全面解析)
  • RabbitMQ应用(1)
  • .NET驾驭Excel之力:Excel应用程序的创建与管理
  • Unity2.5D视角肉鸽项目架构
  • JAVA和C#的语法对比
  • WPS Excel 图表
  • 电商网站开发需要掌握哪些知识技能品牌设计和vi设计有什么区别
  • Spring 框架整合 JUnit 单元测试——包含完整执行流程
  • .NET驾驭Excel之力:自动化数据处理 - 开篇概述与环境准备
  • 多站点网站群的建设与管理识图搜索在线 照片识别
  • C++ builder xe 用imageen组件ImageEnView1合并多个图片导出一个pdf
  • 深度拆解汽车制造系统设计:用 Java + 设计模式打造高扩展性品牌 - 车型动态生成架构
  • 客户端VS前端VS后端
  • 西安企业网站建设哪家好hs网站推广