# 数据库迁移工具 **Repository Path**: ruovea/database-migration-tool ## Basic Information - **Project Name**: 数据库迁移工具 - **Description**: 一个基于 .NET 6.0 的跨数据库迁移工具,支持在 SQLite、MySQL、PostgreSQL 之间进行表结构和数据的无缝迁移。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-06 - **Last Updated**: 2026-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

🔀 DataShift

一键打通 SQLite · MySQL · PostgreSQL · SQL Server

12 种迁移方向 · 向导式可视化操作 · 零学习成本

--- ## 📸 三步完成迁移 **步骤 ① 连接配置** ![连接配置](Doc/链接配置.png) **步骤 ② 迁移设置** ![迁移设置](Doc/迁移设置.png) **步骤 ③ 执行迁移** ![执行迁移](Doc/执行迁移.png) > **连接配置 → 迁移设置 → 执行迁移**,像填表一样简单。 --- ## ✨ 为什么选择 DataShift? | 🎯 | | |---|---| | **全方向覆盖** | SQLite ⇄ MySQL ⇄ PostgreSQL ⇄ SQL Server,4 种数据库任意方向迁移 | | **向导式 UI** | AntdUI 三步向导,填好连接字符串 → 选表 → 一键开跑 | | **智能类型映射** | 自动识别源库字段类型,按目标库方言生成最优 DDL | | **数据零丢失** | JSON / 日期时间自动转义,保留字按方言加引号,事务保护失败回滚 | | **三种写入策略** | 跳过 · 覆盖(DROP 重建) · 追加(保留结构,INSERT IGNORE) | | **表名自由转换** | 原样 · snake_case · PascalCase,适配不同命名规范 | | **批量高性能** | 分批读取 + 批量 INSERT,可配置批次大小 | | **即装即用** | `git clone` → `dotnet run`,无需数据库驱动安装 | --- ## 🚀 快速开始 ```bash git clone https://gitee.com/ruovea/database-migration-tool.git cd database-migration-tool dotnet run --project DataShift.Ui ``` > **环境**:.NET 8.0 SDK + Windows 桌面 | 控制台版本支持 .NET 6.0 --- ## 🖥️ UI 操作流程 ### 步骤 ① 连接配置 填入四种数据库的连接字符串,点击「测试连接」验证,完成后保存。 > 连接字符串会被持久化到 `appsettings.json`,下次启动自动加载。 ### 步骤 ② 迁移设置 - 选择**源数据库**和**目标数据库**(不可相同) - 点击「加载表」从源库拉取表列表,勾选要迁移的表(留空 = 全部) - 可选:手动补充表名、设置目标表命名方式、选择目标表已存在时的处理策略 ### 步骤 ③ 执行迁移 核对概览信息,点击「开始迁移」,实时查看进度条和日志输出。 --- ## 🖥️ 控制台模式 ```text 1. SQLite → MySQL 7. PostgreSQL → SQLite 2. SQLite → PostgreSQL 8. PostgreSQL → MySQL 3. SQLite → SQL Server 9. PostgreSQL → SQL Server 4. MySQL → SQLite 10. SQL Server → SQLite 5. MySQL → PostgreSQL 11. SQL Server → MySQL 6. MySQL → SQL Server 12. SQL Server → PostgreSQL ``` ```bash dotnet run --project DataShift.Tool ``` --- ## ⚙️ 配置 UI 与控制台共用 `appsettings.json`: ```json { "ConnectionStrings": { "SQLite": "DataSource=D:\\path\\to\\your\\database.db", "MySQL": "Server=localhost;Port=3306;Database=mydb;Uid=root;Pwd=your_password;CharSet=utf8mb4;", "PostgreSQL": "Host=localhost;Port=5432;Database=mydb;Username=postgres;Password=your_password;", "SqlServer": "Server=localhost;Database=mydb;User Id=sa;Password=your_password;TrustServerCertificate=True;" } } ``` --- ## 📋 表存在处理模式 | 模式 | 行为 | 适用场景 | |------|------|----------| | **跳过 Skip** | 目标表已存在则跳过 | 仅迁移新表 | | **覆盖 Drop** | DROP → 重建 → 写入 | 完全同步 | | **追加 Append** | 保留结构,INSERT 数据 | 增量追加 | --- ## 🔧 作为类库使用 ```csharp using DataShift.Core; using DataShift.Core.Models; using DataShift.Core.Orchestration; var connections = new Dictionary { { DatabaseKeys.Sqlite, "DataSource=D:\\data\\source.db" }, { DatabaseKeys.MySql, "Server=localhost;Port=3306;Database=mydb;Uid=root;Pwd=123456;CharSet=utf8mb4;" }, }; var migrator = new DatabaseMigrator(connections, new MigrationOptions { ExistsMode = TableExistsMode.Drop, NamingMode = TableNameNamingMode.Snake, }); migrator.ProgressChanged += (_, e) => Console.WriteLine($"[{e.Level}] {e.Message}"); migrator.Migrate(DatabaseKeys.Sqlite, DatabaseKeys.MySql, tables: null, TableExistsMode.Drop); ``` --- ## 🏗️ 项目结构 ``` DataShift/ ├── DataShift.Core/ # 核心引擎(net6.0;net8.0) │ ├── Providers/ # MySQL / PostgreSQL / SQLite / SQL Server │ ├── Orchestration/ # 迁移编排器 │ └── Models/ # 配置模型 ├── DataShift.Tool/ # 控制台宿主(net6.0) ├── DataShift.Ui/ # WinForms 图形界面(net8.0-windows) └── Doc/ # 截图与文档素材 ``` --- ## 📄 许可证 [Apache License 2.0](LICENSE) · 作者 [RuoVea](https://gitee.com/ruovea)

Built with SqlSugar + AntdUI