当前位置: 首页 > article >正文

Mysql,sqllite表结构对比

本代码用C#实现,对比有差异的字段 ,调用类方法Comare 即可获取结果。

public class CompareDataBaseHelper
 {
     string mysqlConnectionString = "Server=127.0.0.1;Database=testdb;Uid=root;Pwd=123456;charset=utf8;";
     string sqliteConnectionString = "Data Source=testdb.db;Version=3;";

     //表名称

     List<string> tableNames = new List<string>
     {
         "sutdent", "school"
     };

     public void Comare()
     {
         foreach (var tableName in tableNames)
         {
             Console.WriteLine($"Comparing table: {tableName}");
             var mysqlColumns = GetMysqlColumns(mysqlConnectionString, tableName);
             var sqliteColumns = GetSqliteColumns(sqliteConnectionString, tableName);

             CompareColumns(mysqlColumns, sqliteColumns, tableName);
             Console.WriteLine();
         }
     }

     static Dictionary<string, string> GetMysqlColumns(string connectionString, string tableName)
     {
         var columns = new Dictionary<string, string>();

         using (var connection = new MySqlConnection(connectionString))
         {
             connection.Open();
             var command = new MySqlCommand($"SHOW COLUMNS FROM {tableName}", connection);
             using (var reader = command.ExecuteReader())
             {
                 while (reader.Read())
                 {
                     var columnName = reader["Field"].ToString();
                     var columnType = reader["Type"].ToString();
                     columns[columnName] = columnType;
                 }
             }
         }

         return columns;
     }

     static Dictionary<string, string> GetSqliteColumns(string connectionString, string tableName)
     {
         var columns = new Dictionary<string, string>();

         using (var connection = new SQLiteConnection(connectionString))
         {
             connection.Open();
             var command = new SQLiteCommand($"PRAGMA table_info({tableName})", connection);
             using (var reader = command.ExecuteReader())
             {
                 while (reader.Read())
                 {
                     var columnName = reader["name"].ToString();
                     var columnType = reader["type"].ToString();
                     columns[columnName] = columnType;
                 }
             }
         }

         return columns;
     }

     static void CompareColumns(Dictionary<string, string> mysqlColumns, Dictionary<string, string> sqliteColumns, string tableName)
     {
         Console.WriteLine($"Comparing columns for table: {tableName}");

         foreach (var column in mysqlColumns)
         {
             if (sqliteColumns.TryGetValue(column.Key, out var sqliteType))
             {
                 if (column.Value != sqliteType)
                 {
                    // Console.WriteLine($"Column {column.Key}: MySQL Type = {column.Value}, SQLite Type = {sqliteType}");
                 }
             }
             else
             {
                 Console.WriteLine($"Column {column.Key}  Type = {column.Value}  exists in MySQL but not in SQLite.");
             }
         }

         foreach (var column in sqliteColumns)
         {
             if (!mysqlColumns.ContainsKey(column.Key))
             {
                 Console.WriteLine($"Column {column.Key}  Type = {column.Value}   exists in SQLite but not in MySQL.");
             }
         }
     }

 }


http://www.kler.cn/news/283123.html

相关文章:

  • xxl-job升级到springboot3.0 导致页面打不开报错)问题
  • 打手机检测算法源码样本展示打手机检测算法实际应用场景介绍
  • 在Windows上用Visual Studio编译Tesseract
  • 什么是单点登录
  • VUE3生命周期钩子
  • 微软在Edge浏览器中引入本地AI模型;苹果将于9月10日发布iPhone 16系列
  • Java 入门指南:初识 Java NIO
  • cmake,make,makefile之间的关系
  • cppbase阶段汇总
  • 零售数字化:基于会员、商品和导购的智能决策
  • 提升你的校招简历:推荐高质量C++项目示例!
  • 【openwrt-21.02】T750 openwrt-21.02 Linux-5.4.238 input子系统----gpio-keys实现分析
  • 机器学习在医学中的应用
  • 自制深度学习推理框架之卷积和池化算子的设计与实现
  • 力扣题/图论/实现 Trie (前缀树)
  • 【Redis】Redis 持久化 -- RDB AOF
  • 02.标准化编程规范
  • 依赖注入:原则、实践与Spring中的应用
  • 高级java每日一道面试题-2024年8月26日-框架篇[Web篇]-如何查询网站在线人数?
  • 【并发编程】从AQS机制到同步工具类
  • SpringBoot依赖之Spring Data Redis的功能抽离公共服务
  • Logrus IT的质量评估门户如何提高游戏本地化质量:案例研究
  • 学习日志8.21--防火墙NAT
  • SEO之网站结构优化(十三-网站地图)
  • XSS-Jquery.html()+DOM破坏
  • Vue(六) render函数、Vue.config.js配置文件,ref属性,props配置项、mixin混入、插件、scoped
  • 【Docker】容器挂载文件修改后 Commit 新镜像,挂载文件不会更新
  • MariaDB 和 MySQL 版本关联
  • 低代码集成中心:简化复杂流程的智能解决方案
  • vue前端获取不同的客户端mac地址(最详细,避免踩坑)