当前位置: 首页> 教育> 幼教 > Mysql,sqllite表结构对比

Mysql,sqllite表结构对比

时间:2025/7/13 8:22:51来源:https://blog.csdn.net/q7989682/article/details/141672930 浏览次数:0次

本代码用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.");
             }
         }
     }

 }

关键字:Mysql,sqllite表结构对比

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: