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

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

csharp 复制代码
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();
            }
        }
    }
}

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

调用方法

csharp 复制代码
var dbHelper = new SQLiteDbHelper("database.db");
var randomUser = RandomUserGenerator.GenerateRandomUser();

var userId = dbHelper.InsertUserAsync(randomUser);

用everything软件搜到这个database.db数据库

使用数据库可视化工具看效果

相关推荐
tpoog6 分钟前
[MySQL]数据类型
android·开发语言·数据库·mysql·算法·adb·贪心算法
爱吃喵的鲤鱼38 分钟前
MySQL增删改查(CRUD)操作详解与实战指南
数据库·mysql
白烟染黑墨40 分钟前
抽离BlazorWebview中的.Net与Javascript的互操作库
c#·客户端开发
啞謎专家1 小时前
在rockylinux9.4安装mongodb报错:缺少:libcrypto.so.10文件库
数据库·mongodb
chat2tomorrow2 小时前
数据仓库是什么?数据仓库的前世今生 (数据仓库系列一)
大数据·数据库·数据仓库·低代码·华为·spark·sql2api
ssxueyi2 小时前
StarRocks 部署:依赖环境
服务器·数据库·starrocks·php
小样vvv2 小时前
【分布式】深入剖析 Sentinel 限流:原理、实现
分布式·c#·sentinel
.又是新的一天.3 小时前
02_MySQL安装及配置
android·数据库·mysql
库海无涯3 小时前
如何把数据从SQLite迁移到PostgreSQL
数据库·postgresql·sqlite
闪电麦坤953 小时前
C#:常见 Console 类输入输出方法
开发语言·c#