当前位置: 首页 > 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.jsqmd.com/news/897213/

相关文章:

  • 相控阵雷达通信一体化:基于压缩感知的稀疏信道估计技术
  • 开发团队如何利用Taotoken CLI统一管理智能体项目的模型配置
  • 廊坊黄金回收哪家好 2026.5.27权威榜单避坑指南 - 资讯纵览
  • 熊大科技君:摩尔定律老了,华为用“韬定律”给半导体换了把新尺子
  • 眼纹多用什么眼油拯救?CA眼油周期修护3周左右表情纹慢慢淡化 - 全网最美
  • 如何永久保存微信聊天记录?WeChatMsg年度报告生成终极指南
  • 2026 西安黄金回收:合扬高价无套路,市民放心选 - 合扬奢侈品交易中心
  • 思源宋体TTF终极指南:如何用7种字重打造专业级中文排版体验
  • AI提升临床研究质控效率:SDV、逻辑核查与异常识别如何联动
  • 利用跳变表建模与协同优化,实现基于RRAM的非理想神经形态计算
  • 体验 Taotoken 旗舰模型更新与稳定低延迟的推理服务
  • MATLAB实战:从频谱到1/3倍频程的声学信号全流程解析
  • 成都制造企业插单太频繁,AI该先算哪些优先级?
  • UPP-NTT:统一并行流水线架构,实现后量子密码硬件加速
  • flex布局
  • 2026 在线式乳化机(分体式_间歇式_连续式_管线式)选型参考:5 家主流品牌横向对比(含江苏思峻 SGN) - 品牌推荐大师1
  • 终极指南:使用OpCore Simplify快速构建OpenCore EFI的完整解决方案
  • CSS 逻辑属性:打破物理方向的限制
  • 鸣潮自动化助手ok-ww完整指南:解放双手的终极游戏辅助工具
  • 大规模MIMO系统能效优化:低精度ADC与检测算法的协同设计
  • AI怎么抠图去背景?2026保姆级教程+抠图工具推荐 - 软件小管家
  • 2026年天津短视频代运营与AI获客完全指南:工厂制造业B端精准引流转化方案 - 年度推荐企业名录
  • UFS 2.2 协议架构深度解析:从分层模型到系统启动
  • 沙海筑能,智塑展台 ——2026 迪拜能源展设计搭建优选 - 资讯焦点
  • 如何在Windows电脑上快速安装安卓应用:APK安装器完整指南
  • Maccy:5分钟掌握macOS剪贴板管理终极指南
  • 2026昆山PLC培训机构排行:核心维度与标杆名录解析 - 互联网科技品牌测评
  • HoRain云--Claude Code 控制 Chrome 浏览器
  • Claude突然限流、Gemini拒绝金融问答、Qwen3中文微调失效?——ChatGPT替代方案紧急预警(附72小时迁移应急预案)
  • chan.py框架:缠论量化分析的技术架构演进与工程实现