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

SQLite表结构转换为MySql表(C#SqlSuga)

文章目录

  • 1 操作示例
    • 1.1 操作数据库扩展类
    • 1.2 自定义字段结构

1 操作示例

stringdatasource="E:\\SQLite\\datasource.db";varsqliteDb=datasource.GetSqlSugarClient_SQLite();stringdatabase="test";stringuid="root";stringpwd="123456";varmysqlDb=database.GetSqlSugarClient_MySql(uid,pwd);sqliteDb.Table_SQLite_To_MySql(mysqlDb);

1.1 操作数据库扩展类

/// <summary>/// 操作数据库扩展类/// </summary>publicstaticclassExtensionTableStruct{/// <summary>/// 获取SQLite操作数据库对象/// </summary>publicstaticSqlSugarClientGetSqlSugarClient_SQLite(thisstringdatasource){stringconnStr=$"Data Source={datasource};";vardb=newSqlSugarClient(newConnectionConfig(){DbType=DbType.Sqlite,ConnectionString=connStr,// SQLite 文件路径IsAutoCloseConnection=true});returndb;}/// <summary>/// 获取MySql操作数据库对象/// </summary>publicstaticSqlSugarClientGetSqlSugarClient_MySql(thisstringdatabase,stringuid,stringpwd){varconnectionString=$"server=localhost;database={database};user id={uid};password={pwd};port=3306;CharSet=utf8mb4;SslMode=None;";vardb=newSqlSugarClient(newConnectionConfig(){DbType=DbType.MySql,ConnectionString=connectionString,IsAutoCloseConnection=true});returndb;}/// <summary>/// SQLite表结构转换为MySql表结构/// </summary>/// <param name="sqliteDb"></param>/// <param name="mysqlDb"></param>publicstaticvoidTable_SQLite_To_MySql(thisSqlSugarClientsqliteDb,SqlSugarClientmysqlDb){vartableNames=sqliteDb.GetSQLiteTableNames();foreach(vartableNameintableNames){varcolumns=sqliteDb.GetSQLileTableStruct(tableName);mysqlDb.CreateMySqlTable(tableName,columns);}}/// <summary>/// 获取SQLite所有表名称/// </summary>privatestaticList<string>GetSQLiteTableNames(thisSqlSugarClientdb){stringsql="SELECT name FROM sqlite_master "+"WHERE type='table' AND name NOT LIKE 'sqlite_%'";vartableDt=db.Ado.GetDataTable(sql);varlist=newList<string>();foreach(DataRowrowintableDt.Rows){list.Add(row[0].ToString());}returnlist;}/// <summary>/// 创建MySql表结构/// </summary>privatestaticvoidCreateMySqlTable(thisSqlSugarClientmysqlDb,stringtableName,List<MyColumnInfo>columns){List<string>fieldLines=newList<string>();List<string>keyLines=newList<string>();foreach(MyColumnInfocolincolumns){stringmysqlType="";if(col.Type=="integer"){mysqlType="INT";}elseif(col.Type=="int"){mysqlType="INT";}elseif(col.Type=="real"){mysqlType="DOUBLE";}elseif(col.Type=="text"){mysqlType="LONGTEXT";}elseif(col.Type=="blob"){mysqlType="LONGBLOB";}elseif(col.Type=="datetime"){mysqlType="DATETIME";}else{mysqlType="VARCHAR(255)";}// 字段名 + 类型stringline="`"+col.Name+"` "+mysqlType;// 非空if(!col.IsNullable){line+=" NOT NULL";}// 自增if(col.IsIdentity){line+=" AUTO_INCREMENT";}fieldLines.Add(line);// 主键if(col.IsPrimaryKey){keyLines.Add("PRIMARY KEY (`"+col.Name+"`)");}}// 拼接所有语句List<string>allLines=newList<string>();allLines.AddRange(fieldLines);allLines.AddRange(keyLines);stringsql="CREATE TABLE IF NOT EXISTS `"+tableName+"` (\n "+string.Join(",\n ",allLines)+"\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";// 执行建表mysqlDb.Ado.ExecuteCommand(sql);}/// <summary>/// 获取SQLite表结构/// </summary>privatestaticList<MyColumnInfo>GetSQLileTableStruct(thisSqlSugarClientdb,stringtableName){varlist=newList<MyColumnInfo>();vardt=db.Ado.GetDataTable($"PRAGMA table_info([{tableName}])");foreach(DataRowrowindt.Rows){varcol=newMyColumnInfo{Name=row["name"].ToString(),Type=row["type"].ToString().ToLower(),IsPrimaryKey=row["pk"].ToString()=="1",IsNullable=row["notnull"].ToString()=="0",};// SQLite 只有 INTEGER 主键才是自增col.IsIdentity=col.IsPrimaryKey&&col.Type=="integer";list.Add(col);}returnlist;}}

1.2 自定义字段结构

/// <summary>/// 自定义字段结构/// </summary>publicclassMyColumnInfo{publicstringName{get;set;}// 字段名publicstringType{get;set;}// 字段类型publicboolIsPrimaryKey{get;set;}// 是否主键publicboolIsNullable{get;set;}// 是否可空publicboolIsIdentity{get;set;}// 是否自增}
http://www.rkmt.cn/news/1403871.html

相关文章:

  • 实测Taotoken旗舰模型更新速度与API调用稳定性观感
  • 数字DC-DC转换器输出电容时间常数自校准技术详解
  • LuaJIT反编译技术深度解析:LJD架构剖析与实战应用指南
  • HCIA/HCIP备考实战:eNSP模拟企业园区网VLAN间路由配置(单臂路由与三层交换)
  • 通过curl命令直接测试Taotoken聊天接口的完整步骤与排错指南
  • 利用跳变表建模与协同优化,实现基于RRAM的非理想神经形态计算
  • AI提升临床研究质控效率:SDV、逻辑核查与异常识别如何联动
  • SPFA算法:负权图最短路径与负环检测
  • EmulatorJS版本选择终极指南:如何挑选最适合你的复古游戏模拟器版本
  • flex布局
  • 成都制造企业插单太频繁,AI该先算哪些优先级?
  • 魔兽争霸3终极优化指南:5分钟告别画面拉伸和帧率限制
  • 从gitbus项目看Git仓库作为隐式控制平面的安全风险与防御
  • 大规模MIMO系统能效优化:低精度ADC与检测算法的协同设计
  • PyQt-Fluent-Widgets:让Python桌面应用拥有Windows 11现代化界面的终极指南
  • 模拟神经网络芯片:纳瓦级功耗实现生物医学边缘AI分类
  • Python学习第47天:ORM与数据库操作
  • 如何在3天内搭建你的专属缠论量化分析系统:从零到实战的完整指南
  • FanControl终极指南:3步实现Windows电脑风扇静音控制
  • 免费、隐私、环保!Ollama本地AI优势多,你还不用?
  • BLE 5.1室内定位实战:基于真实PPE追踪数据集的算法开发与性能分析
  • HoRain云--Claude Code 控制 Chrome 浏览器
  • 3分钟部署指南:跨浏览器批量URL管理的高效解决方案
  • 华硕笔记本终极性能管家:GHelper轻量控制工具完整使用指南
  • 【2026-05-25】丐版家旅
  • 3分钟搞定音乐加密文件:Unlock Music 完全指南
  • 钉钉消息防撤回补丁:职场沟通的终极信息保护方案
  • 锋芒剪辑-dota2自动剪辑微信小程序
  • 5分钟快速上手B站视频下载神器:BiliDownloader完整使用指南
  • 佛山1688代运营做家装建材类目哪家性价比高