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

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

在项目中能正常编译的代码

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

namespace MachineDemo.Utils
{
    public class SQLiteDbHelper
    {

        // 用户实体类
        public class User
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
            public string Email { get; set; }
        }

        
        public class RandomUserGenerator
        {
            private static Random random = new Random();
            private static int nameCounter = 0; // 唯一计数器

            public static User GenerateRandomUser()
            {
                // 随机名字列表  
                string[] names = { "Alice", "Bob", "Charlie", "David", "Eva", "Frank", "Grace", "Henry", "Ivy", "Jack" };

                // 随机选择一个名字,并附加唯一计数器  
                string randomName = $"{names[random.Next(names.Length)]}{nameCounter++}";

                // 随机生成年龄(1到120岁)  
                int randomAge = random.Next(1, 121);

                // 生成随机邮箱  
                string baseEmail = "user";
                int randomNumber = random.Next(0, 99999); // 生成0到99999之间的随机数  
                string randomEmail = $"{baseEmail}{randomNumber.ToString("D5")}@example.com";

                return new User
                {
                    Name = randomName,
                    Age = randomAge,
                    Email = randomEmail
                };
            }
        }

    //public class RandomUserGenerator
    //    {
    //        private static Random random = new Random();

    //        public static User GenerateRandomUser()
    //        {
    //            // 随机名字列表
    //            string[] names = { "Alice", "Bob", "Charlie", "David", "Eva", "Frank", "Grace", "Henry", "Ivy", "Jack" };

    //            // 随机选择一个名字
    //            string randomName = names[random.Next(names.Length)];

    //            // 随机生成年龄(1到120岁)
    //            int randomAge = random.Next(1, 121);

    //            // 生成随机邮箱
    //            string baseEmail = "user";
    //            int randomNumber = random.Next(0, 99999); // 生成0到99999之间的随机数
    //            string randomEmail = $"{baseEmail}{randomNumber.ToString("D5")}@example.com";

    //            return new User
    //            {
    //                Name = randomName,
    //                Age = randomAge,
    //                Email = randomEmail
    //            };
    //        }
    //    }



        private static readonly SemaphoreSlim writeLock = new SemaphoreSlim(1, 1);
        private readonly string connectionString;

        /// <summary
        /// 初始化数据库连接(.NET 4.6.1兼容版本)
        /// </summary
        public SQLiteDbHelper(string dbPath)
        {
            // 配置连接参数
            var builder = new SQLiteConnectionStringBuilder
            {
                DataSource = dbPath,
                Version = 3,
                Pooling = true,
                //MaxPoolSize = 10,
                DefaultTimeout = 30,
                FailIfMissing = false
            };
            connectionString = builder.ConnectionString;

            InitializeDatabase();
        }

        /// <summary
        /// 初始化数据库结构
        /// </summary
        private void InitializeDatabase()
        {
            using (var conn = new SQLiteConnection(connectionString))
            {
                conn.Open();
                const string sql = @"
                CREATE TABLE IF NOT EXISTS Users (
                    Id INTEGER PRIMARY KEY AUTOINCREMENT,
                    Name TEXT NOT NULL,
                    Age INTEGER,
                    Email TEXT UNIQUE
                )";
                new SQLiteCommand(sql, conn).ExecuteNonQuery();
            }
        }

        /// <summary
        /// 异步插入用户(线程安全)
        /// </summary
        public async Task<int> InsertUserAsync(User user)
        {
            await writeLock.WaitAsync();
            try
            {
                using (var conn = new SQLiteConnection(connectionString))
                {
                    await conn.OpenAsync();
                    const string sql = @"
                    INSERT INTO Users (Name, Age, Email)
                    VALUES (@Name, @Age, @Email);
                    SELECT lastinsertrowid();";

                    using (var cmd = new SQLiteCommand(sql, conn))
                    {
                        cmd.Parameters.AddWithValue("@Name", user.Name);
                        cmd.Parameters.AddWithValue("@Age", user.Age);
                        cmd.Parameters.AddWithValue("@Email", user.Email);

                        return Convert.ToInt32(await cmd.ExecuteScalarAsync());
                    }
                }
            }
            finally
            {
                writeLock.Release();
            }
        }

        /// <summary
        /// 异步查询所有用户
        /// public async Task<int> InsertUserAsync(User user)
        /// </summary
        public async Task<User[]> GetAllUsersAsync()
        //public Task<User[]> GetAllUsersAsync()
        {
            using (var conn = new SQLiteConnection(connectionString))
            {
                await conn.OpenAsync();
                //conn.OpenAsync();
                const string sql = "SELECT  FROM Users";

                using (var cmd = new SQLiteCommand(sql, conn))
                using (var reader = await cmd.ExecuteReaderAsync())
                //using (var reader = cmd.ExecuteReader())
                {
                    var users = new System.Collections.Generic.List<User>();
                    //while (await reader.ReadAsync())
                    while (reader.Read())
                    {
                        users.Add(new User
                        {
                            Id = reader.GetInt32(0),
                            Name = reader.GetString(1),
                            Age = reader.GetInt32(2),
                            Email = reader.IsDBNull(3) ? null : reader.GetString(3)
                        });
                    }
                    // return users.ToArray();
                    return users.ToArray();
                }
            }
        }


        //同步
        //public User[] GetAllUsers()
        //{
        //    using (var conn = new SQLiteConnection(connectionString))
        //    {
        //        conn.Open();
        //        const string sql = "SELECT * FROM Users";

        //        using (var cmd = new SQLiteCommand(sql, conn))
        //        using (var reader = cmd.ExecuteReader())
        //        {
        //            var users = new List<User>();
        //            while (reader.Read())
        //            {
        //                users.Add(new User
        //                {
        //                    Id = reader.GetInt32(0),
        //                    Name = reader.GetString(1),
        //                    Age = reader.GetInt32(2),
        //                    Email = reader.IsDBNull(3) ? null : reader.GetString(3)
        //                });
        //            }
        //            return users.ToArray();
        //        }
        //    }
        //}

        /// <summary
        /// 异步删除用户(线程安全)
        /// </summary
        public async Task<int> DeleteUserAsync(int userId)
        {
            await writeLock.WaitAsync();
            try
            {
                using (var conn = new SQLiteConnection(connectionString))
                {
                    await conn.OpenAsync();
                    const string sql = "DELETE FROM Users WHERE Id = @Id";

                    using (var cmd = new SQLiteCommand(sql, conn))
                    {
                        cmd.Parameters.AddWithValue("@Id", userId);
                        return await cmd.ExecuteNonQueryAsync();
                    }
                }
            }
            finally
            {
                writeLock.Release();
            }
        }
    }
}


效果展示

效果展示,数据库里持续增加随机值

调用方法

var dbHelper = new SQLiteDbHelper("database.db");
var randomUser = RandomUserGenerator.GenerateRandomUser();

var userId = dbHelper.InsertUserAsync(randomUser);

用everything软件搜到这个database.db数据库
使用数据库可视化工具看效果

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

相关文章:

  • 大模型最新面试题系列:微调篇之微调框架(二)
  • AI赋能python数据处理、分析与预测操作流程
  • Vue背景介绍+声明式渲染+数据响应式
  • 基于Baklib的云内容中台落地实践
  • JMeter运行日志详细分析
  • Kafka Stream从入门到精通:构建高吞吐、低延迟的实时流处理应用
  • 力扣.旋转矩阵Ⅱ
  • sqli-labs靶场 less6
  • Android 串口配置
  • 双磁条线跟踪控制
  • LJF-Framework 第12章 LjfFilter拦截器设计
  • hbuilderx打包iOS上传苹果商店的最简流程
  • AI坦克智能决策:MOE模型的动态专家协作与加权融合
  • Python自动化模块:开启高效编程新时代
  • 乘AI之势,劲吹正能量之风:生成式人工智能(GAI)认证引领新时代
  • AudioFlinger与AudioPoliceManager初始化流程
  • unity客户端面试高频2(自用)
  • Redis底层数据结构实现
  • Python 科学计算
  • QML输入控件:Dial外观深度定制(4)
  • angr基础学习
  • 基于改进粒子群算法的多目标分布式电源选址定容规划(附带Matlab代码)
  • 【区块链安全 | 第十篇】智能合约概述
  • Unity编辑器功能及拓展(1) —特殊的Editor文件夹
  • Linux 一键安装 Docker 的万能脚本
  • python和c中作用域的差异
  • Windows 系统中使用 fnm 安装 Node.js 的完整指南
  • 为什么idea显示数据库连接成功,但操作数据库时,两边数据不同步
  • Vite 开发服务器存在任意文件读取漏洞
  • Selenium文件上传