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;

 查询符合条件的数据

关系运算符

sql语句中用到的sql运算符
符号 含义
>大于
>=大于等于
<小于
<=小于等于
!=或<>不等于
==或=等于 
SELECT * FROM users WHERE age > 30;

查询范围运算

SELECT * FROM users WHERE age BETWEEN 1 AND 100;
// 如果表里有日期类型的数据的话
SELECT * FROM users WHERE date BETWEEN '1981-01-01' AND '1981-12-31';

模糊查询

符号含义
_匹配任意一个字符
%匹配任意多个字符
SELECT * FROM users WHERE name LIKE '%er%';
SELECT * FROM users WHERE name LIKE '_e_';

查询字段为空的内容

SELECT * FROM users WHERE age IS NULL;
SELECT * FROM users WHERE age IS NOT NULL;

查询单挑数据 

SELECT * FROM users WHERE id = 1;

附加多个条件

SELECT * FROM users WHERE name = 'Peter' AND age > 20;

4. 更新数据 

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

UPDATE users SET age = 26 WHERE id = 1;

 5. 查询排序

让数据库中一列或多列按照升序或者降序的顺序排序。

名称含义
ASC升序
DESC降序

 查询表中所有信息按照age降序排列

SELECT * FROM users ORDER BY age DESC;

 查询表中所有信息按照age降序排列,如果age相同那么按照id升序排列

SELECT * FROM users ORDER BY age DESC,id ASC;

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

NuGet安装 System.Data.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("在数据库中没有找到指定内容");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值