百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

SQLite在C#中的应用

wptr33 2025-08-01 21:33 28 浏览

SQLite 是一个轻量级的嵌入式数据库,它适用于小型到中型的应用场景。SQLite在C#中的应用非常广泛,支持跨平台开发,并且非常易于使用。下面我们将详细介绍如何在C#中使用SQLite,并提供详细的例子。

特点

  1. 轻量级:SQLite 是一个嵌入式数据库,不需要独立的服务器进程,它是一个C库,可以集成到主程序中。
  2. 跨平台:SQLite 支持包括Windows、Linux、macOS在内的多个平台。
  3. 自包含:SQLite 的数据库是单个文件,非常适合移动应用和其他需要便携性的应用。
  4. 丰富的功能:支持事务、跨多个表的复杂查询、视图、触发器等。

环境配置

  1. 安装SQLite NuGet包
dotnet add package System.Data.SQLite.Core

基础操作示例

1. 创建并连接SQLite数据库

首先,我们需要创建一个SQLite数据库,并连接到该数据库。

private void btnCreateDb_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=demo.db;Version=3;";
    using (var connection = new SQLiteConnection(connectionString))
    {
        connection.Open();
        MessageBox.Show("SQLite database connection open.");
    }
}

2. 创建表

创建一个名为 users 的表,用于存储用户信息。

private void btnCreateTable_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=demo.db;Version=3;";
    using (var connection = new SQLiteConnection(connectionString))
    {
        connection.Open();

        string sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
        using (var command = new SQLiteCommand(sql, connection))
        {
            command.ExecuteNonQuery();
            MessageBox.Show("Table 'users' created.");
        }
    }
}

3. 插入数据

往 users 表中插入用户数据。

private void btnInsert_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=demo.db;Version=3;";
    using (var connection = new SQLiteConnection(connectionString))
    {
        connection.Open();

        string sql = "INSERT INTO users (name, age) VALUES ('Alice', 30)";
        using (var command = new SQLiteCommand(sql, connection))
        {
            command.ExecuteNonQuery();
            MessageBox.Show("Data inserted into 'users' table.");
        }
    }
}

4. 查询数据

从 users 表中查询数据,并打印输出。

private void btnQuery_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=demo.db;Version=3;";
    using (var connection = new SQLiteConnection(connectionString))
    {
        connection.Open();

        string sql = "SELECT * FROM users";
        using (var command = new SQLiteCommand(sql, connection))
        {
            using (SQLiteDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    MessageBox.Show(#34;ID: {reader["id"]}, Name: {reader["name"]}, Age: {reader["age"]}");
                }
            }
        }
    }
}

5. 更新数据

更新 users 表中的数据。

using System;
using System.Data.SQLite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=demo.db;Version=3;";
        using (var connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            string sql = "UPDATE users SET age = 31 WHERE name = 'Alice'";
            using (var command = new SQLiteCommand(sql, connection))
            {
                command.ExecuteNonQuery();
                Console.WriteLine("Data updated in 'users' table.");
            }
        }
    }
}

6. 删除数据

从 users 表中删除数据。

using System;
using System.Data.SQLite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=demo.db;Version=3;";
        using (var connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            string sql = "DELETE FROM users WHERE name = 'Alice'";
            using (var command = new SQLiteCommand(sql, connection))
            {
                command.ExecuteNonQuery();
                Console.WriteLine("Data deleted from 'users' table.");
            }
        }
    }
}

一个简单仓储类

用户模型类

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

我们创建一个用户仓储类,包含基本的CRUD(Create, Read, Update, Delete)操作:

using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AppSqlLite
{
    public class UserRepository
    {
        private string _connectionString;

        public UserRepository(string connectionString)
        {
            _connectionString = connectionString;
            InitializeDatabase();
        }

        private void InitializeDatabase()
        {
            using (var connection = new SQLiteConnection(_connectionString))
            {
                connection.Open();

                string sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
                using (var command = new SQLiteCommand(sql, connection))
                {
                    command.ExecuteNonQuery();
                }
            }
        }

        public void AddUser(User user)
        {
            using (var connection = new SQLiteConnection(_connectionString))
            {
                connection.Open();

                string sql = "INSERT INTO users (name, age) VALUES (@name, @age)";
                using (var command = new SQLiteCommand(sql, connection))
                {
                    command.Parameters.AddWithValue("@name", user.Name);
                    command.Parameters.AddWithValue("@age", user.Age);
                    command.ExecuteNonQuery();
                }
            }
        }

        public User GetUser(int id)
        {
            using (var connection = new SQLiteConnection(_connectionString))
            {
                connection.Open();

                string sql = "SELECT * FROM users WHERE id = @id";
                using (var command = new SQLiteCommand(sql, connection))
                {
                    command.Parameters.AddWithValue("@id", id);
                    using (SQLiteDataReader reader = command.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            return new User
                            {
                                Id = Convert.ToInt32(reader["id"]),
                                Name = reader["name"].ToString(),
                                Age = Convert.ToInt32(reader["age"])
                            };
                        }
                    }
                }
            }
            return null;
        }

        public List<User> GetAllUsers()
        {
            List<User> users = new List<User>();
            using (var connection = new SQLiteConnection(_connectionString))
            {
                connection.Open();

                string sql = "SELECT * FROM users";
                using (var command = new SQLiteCommand(sql, connection))
                {
                    using (SQLiteDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            users.Add(new User
                            {
                                Id = Convert.ToInt32(reader["id"]),
                                Name = reader["name"].ToString(),
                                Age = Convert.ToInt32(reader["age"])
                            });
                        }
                    }
                }
            }
            return users;
        }

        public void UpdateUser(User user)
        {
            using (var connection = new SQLiteConnection(_connectionString))
            {
                connection.Open();

                string sql = "UPDATE users SET name = @name, age = @age WHERE id = @id";
                using (var command = new SQLiteCommand(sql, connection))
                {
                    command.Parameters.AddWithValue("@name", user.Name);
                    command.Parameters.AddWithValue("@age", user.Age);
                    command.Parameters.AddWithValue("@id", user.Id);
                    command.ExecuteNonQuery();
                }
            }
        }

        public void DeleteUser(int id)
        {
            using (var connection = new SQLiteConnection(_connectionString))
            {
                connection.Open();

                string sql = "DELETE FROM users WHERE id = @id";
                using (var command = new SQLiteCommand(sql, connection))
                {
                    command.Parameters.AddWithValue("@id", id);
                    command.ExecuteNonQuery();
                }
            }
        }
    }
}

private void btnRepository_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=demo.db;Version=3;";
    UserRepository userRepository = new UserRepository(connectionString);

    // 添加用户
    User user = new User { Name = "Alice", Age = 30 };
    userRepository.AddUser(user);
    MessageBox.Show("User added.");

    // 获取用户
    User retrievedUser = userRepository.GetUser(1);
    MessageBox.Show(#34;Retrieved User: ID={retrievedUser.Id}, Name={retrievedUser.Name}, Age={retrievedUser.Age}");

    // 更新用户
    retrievedUser.Age = 31;
    userRepository.UpdateUser(retrievedUser);
    MessageBox.Show("User updated.");

    // 获取所有用户
    var users = userRepository.GetAllUsers();
    MessageBox.Show("All users:");
    foreach (var u in users)
    {
        MessageBox.Show(#34;ID={u.Id}, Name={u.Name}, Age={u.Age}");
    }

    // 删除用户
    userRepository.DeleteUser(1);
    MessageBox.Show("User deleted.");
}

结论

本文介绍了如何在C#中使用SQLite以及一些常见的数据库操作。SQLite 是一个强大的嵌入式数据库,适用于各种应用场景。希望通过本文的介绍,您能够轻松地在C#项目中使用SQLite进行数据库操作。

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...