在项目中能正常编译的代码
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数据库
使用数据库可视化工具看效果