ColorVision.Database
目录
概述
ColorVision.Database 是专门为 ColorVision 系统提供数据库功能的 UI 组件库,主要支持 MySQL 数据库的连接、配置、管理和操作。它提供了可视化的数据库管理界面,简化了数据库相关的开发和维护工作。
基本信息
- 主要功能: 数据库连接管理、UI控件、查询工具
- 支持数据库: MySQL, SQLite
- UI 框架: WPF
- 特色功能: 可视化配置、本地服务管理、通用查询界面、泛型DAO
- 版本: 1.5.1.1
- 目标框架: .NET 8.0 / .NET 10.0
核心功能
1. 数据库连接管理
- MySQL 连接配置: 可视化的连接参数设置
- 连接状态监控: 实时连接状态检测和显示
- 连接池管理: 高效的数据库连接复用
- 安全认证: 支持用户名密码和高级安全选项,密码加密存储
- 连接测试: 一键测试数据库连接
2. 可视化管理工具
- 数据库连接窗口 (
MySqlConnect): 图形化配置数据库连接参数 - 管理工具窗口 (
MySqlToolWindow): 集成的数据库管理界面 - 通用查询窗口 (
GenericQueryWindow): 执行 SQL 查询并显示结果 - 本地服务管理 (
MySqlLocalServicesManager): MySQL 本地服务的启停控制
3. 数据访问抽象
- 泛型 DAO (
BaseTableDao<T>): 基于泛型的数据访问对象,支持 CRUD 操作 - 实体接口 (
IEntity): 标准化实体定义 - SQL 命令抽象 (
IMysqlCommand): 命令模式的数据库操作 - 配置向导 (
MysqlWizardStep): 向导式数据库配置流程
架构设计
主要组件
MySQLConfig
数据库连接配置类,采用单例模式管理连接参数。
csharp
public class MySQLConfig : IConfig
{
public static MySQLConfig Instance { get; } = new MySQLConfig();
public string Server { get; set; } = "localhost";
public int Port { get; set; } = 3306;
public string Database { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string ConnectionString { get; }
public void Save();
public void Load();
}MySqlControl
数据库连接控制类,提供连接管理和 SQL 执行功能。
csharp
public static class MySqlControl
{
public static MySqlConnection GetConnection();
public static bool TestConnection();
public static bool TestConnection(string connectionString);
public static DataTable ExecuteQuery(string sql, Dictionary<string, object> parameters = null);
public static int ExecuteNonQuery(string sql, Dictionary<string, object> parameters = null);
}BaseTableDao<T>
泛型数据访问对象基类,提供标准 CRUD 操作。
csharp
public abstract class BaseTableDao<T> where T : class, IEntity, new()
{
public virtual List<T> GetAll();
public virtual T GetById(int id);
public virtual int Insert(T entity);
public virtual int Update(T entity);
public virtual int Delete(int id);
protected List<T> ExecuteQuery(string sql, Dictionary<string, object> parameters = null);
}UI控件
MySqlConnect
数据库连接配置窗口,提供可视化的连接参数设置界面。
功能特性:
- 服务器地址、端口、数据库名输入
- 用户名、密码输入(密码加密显示)
- 连接测试按钮
- 保存配置按钮
GenericQueryWindow
通用 SQL 查询窗口,支持执行查询、显示结果、导出数据。
功能特性:
- SQL 语句编辑区
- 查询执行按钮
- 结果表格显示
- 导出到 CSV/Excel
MySqlToolWindow
数据库管理工具窗口,提供常用的数据库管理功能。
功能特性:
- 数据库状态监控
- 快速查询工具
- 连接信息展示
数据访问层
IEntity 接口
实体类的标准接口,所有数据库实体都应实现此接口。
csharp
public interface IEntity
{
int Id { get; set; }
}使用 DAO 进行数据操作
csharp
// 定义实体
public class User : IEntity
{
public int Id { get; set; }
public string Username { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
}
// 创建 DAO
public class UserDao : BaseTableDao<User>
{
public UserDao() : base("users") { }
public User GetByUsername(string username)
{
var sql = $"SELECT * FROM {TableName} WHERE Username = @username";
var parameters = new Dictionary<string, object> { { "@username", username } };
return ExecuteQuery(sql, parameters).FirstOrDefault();
}
}
// 使用 DAO
var userDao = new UserDao();
// 插入
var newUser = new User { Username = "john", Email = "john@example.com" };
userDao.Insert(newUser);
// 查询
var users = userDao.GetAll();
var user = userDao.GetById(1);
// 更新
user.Email = "new@example.com";
userDao.Update(user);
// 删除
userDao.Delete(1);使用示例
1. 配置数据库连接
csharp
// 配置数据库连接
var config = MySQLConfig.Instance;
config.Server = "localhost";
config.Port = 3306;
config.Database = "colorvision_db";
config.Username = "admin";
config.Password = "password";
config.Save();
// 测试连接
if (MySqlControl.TestConnection())
{
Console.WriteLine("数据库连接成功");
}2. 显示连接配置窗口
csharp
// 显示数据库连接配置窗口
var connectWindow = new MySqlConnect();
if (connectWindow.ShowDialog() == true)
{
// 连接配置完成并保存
}3. 执行自定义 SQL 查询
csharp
// 执行查询
var dataTable = MySqlControl.ExecuteQuery("SELECT * FROM users WHERE IsActive = 1");
// 带参数的查询
var parameters = new Dictionary<string, object>
{
{ "@status", "active" },
{ "@date", DateTime.Now.AddDays(-30) }
};
var results = MySqlControl.ExecuteQuery(
"SELECT * FROM users WHERE Status = @status AND CreatedAt > @date",
parameters);4. 显示通用查询窗口
csharp
// 显示 SQL 查询窗口
var queryWindow = new GenericQueryWindow();
queryWindow.Show();配置管理
配置向导步骤
csharp
public class DatabaseWizardStep : IWizardStep
{
public string Title => "数据库配置";
public string Description => "配置数据库连接参数";
public UserControl StepContent => new DatabaseConfigControl();
public bool CanGoNext => MySqlControl.TestConnection();
public bool Validate()
{
var config = MySQLConfig.Instance;
if (string.IsNullOrEmpty(config.Server) ||
string.IsNullOrEmpty(config.Database))
{
MessageBox.Show("请填写完整的数据库连接信息");
return false;
}
if (!MySqlControl.TestConnection())
{
MessageBox.Show("数据库连接测试失败");
return false;
}
return true;
}
}最佳实践
1. 连接管理
- 使用连接池避免频繁创建连接
- 及时释放数据库资源
- 实现连接超时和重试机制
2. 安全考虑
- 密码加密存储(使用 EncryptionHelper)
- SQL 注入防护(使用参数化查询)
- 避免在代码中硬编码连接字符串
3. 性能优化
- 使用索引优化查询
- 分页处理大数据集
- 缓存常用查询结果
4. 错误处理
- 完善的异常处理机制
- 用户友好的错误信息
- 详细的日志记录
