Files
Console_Faces_Prod/TestWebSocket/TestSqlClass.cs
2025-11-26 13:45:58 +08:00

94 lines
3.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System; // 引入System命名空间提供基础类型
using System.Collections.Generic; // 引入集合命名空间,提供泛型集合
using System.Data; // 引入数据命名空间,提供数据访问基础接口
using System.Threading; // 引入线程命名空间,提供多线程编程支持
using MySql.Data.MySqlClient; // 引入MySQL的ADO.NET提供程序命名空间
public class BatchDatabaseExecutor
{
private List<string> _commands = new List<string>(); // 存储待执行的SQL命令列表
private Timer _timer; // 定时器,用于定期执行数据库操作
private string _connectionString; // 数据库连接字符串
public BatchDatabaseExecutor(string connectionString) // 构造函数,初始化连接字符串和定时器
{
_connectionString = connectionString; // 初始化数据库连接字符串
// 设置定时器每1000毫秒1秒执行一次
_timer = new Timer(TimerCallback, null, 0, 1000);
}
public void AddCommand(string command) // 向命令列表添加SQL命令
{
lock (_commands) // 使用lock确保线程安全
{
_commands.Add(command); // 添加命令到列表
}
}
private void TimerCallback(object o) // 定时器回调方法,执行数据库操作
{
List<string> commandsToExecute;
lock (_commands) // 使用lock确保线程安全
{
if (_commands.Count == 0) // 如果没有命令需要执行,直接返回
return;
commandsToExecute = new List<string>(_commands); // 复制命令列表
_commands.Clear(); // 清空原命令列表,准备下一次收集
}
ExecuteBatch(commandsToExecute); // 执行批量命令
}
private void ExecuteBatch(List<string> commands) // 执行批量数据库命令
{
try
{
using (var connection = new MySqlConnection(_connectionString)) // 创建数据库连接
{
connection.Open(); // 打开数据库连接
using (var transaction = connection.BeginTransaction()) // 开始数据库事务
{
foreach (var commandText in commands) // 遍历命令列表
{
using (var command = new MySqlCommand(commandText, connection, transaction)) // 创建命令对象
{
command.ExecuteNonQuery(); // 执行命令
}
}
transaction.Commit(); // 提交事务
}
}
}
catch (Exception ex) // 捕获并处理异常
{
Console.WriteLine("An error occurred: " + ex.Message); // 打印异常信息
// 在这里可以添加错误处理逻辑,比如重试或记录日志
}
}
public void Dispose() // 释放资源
{
_timer?.Change(Timeout.Infinite, Timeout.Infinite); // 停止定时器
_timer?.Dispose(); // 释放定时器资源
}
}
// 使用实例
/*class Program
{
static void Main(string[] args)
{
var executor = new BatchDatabaseExecutor("your_connection_string_here"); // 实例化数据库执行器
// 不同方法调用
*//* executor.AddCommand("INSERT INTO table_name (column1) VALUES ('value1');");
executor.AddCommand("UPDATE table_name SET column1='value2' WHERE id=1;");
executor.AddCommand("DELETE FROM table_name WHERE id=2;");*//*
executor.Dispose(); // 调用Dispose方法释放资源
}
}
*/