好消息,

程序员专用早餐机。和掌柜说 ideaam,可以节省20元。 点击链接  或復·制这段描述¥k3MbbVKccMU¥后到淘♂寳♀

或者 淘宝扫码 支持下同行哈

----------------------------------------------------------------------------------------------------------------------------

 [TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
using (testEntities entity = new testEntities())
{
var tableName = "test2";
var json = "{\"name\":\"hello\", \"age\":1, \"createtime\":\"2012-04-23T18:25:43.511Z\", object:{\"column1\":\"test\", \"column2\":\"test\"}}";
var jsonEntity = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(json); var tableList = entity.Database.SqlQuery<MysqlTableSchema>("show tables").ToListAsync();
tableList.Wait(); var isExistsTable = tableList.Result.Where(r => r.tables_in_test.ToLower() == tableName.ToLower()).Count() > 0;
if (!isExistsTable)
{
entity.Database.ExecuteSqlCommand("CREATE TABLE `" + tableName + "` (`id` INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`));");
} CreateColumns(tableName, jsonEntity);
}
} private static void CreateColumns(string tableName, JObject jsonEntity, string columPrefix = "")
{
using (testEntities entity = new testEntities())
{
var columList = entity.Database.SqlQuery<MysqlColumSchema>("DESCRIBE " + tableName).ToListAsync();
columList.Wait();
foreach (var item in jsonEntity.Properties())
{
var columName = string.IsNullOrEmpty(columPrefix) ? item.Name.ToLower() : columPrefix + "_" + item.Name.ToLower();
var isExists = columList.Result.Where(e => e.field.ToLower().Equals(columName)).ToList().Count() > 0;
if (!isExists)
{
var mysqlType = "";
var index = "";
switch (item.Value.Type)
{
case Newtonsoft.Json.Linq.JTokenType.Object:
CreateColumns(tableName, item.Value.ToObject<JObject>(), columPrefix = item.Name.ToLower());
continue;
case Newtonsoft.Json.Linq.JTokenType.Boolean:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");";
break;
case Newtonsoft.Json.Linq.JTokenType.Bytes:
break;
case Newtonsoft.Json.Linq.JTokenType.Comment:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Date:
mysqlType = "datetime NULL DEFAULT CURRENT_TIMESTAMP";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Float:
mysqlType = "decimal(6,2) NULL DEFAULT '0.00'";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Guid:
mysqlType = "nvarchar(45) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Integer:
mysqlType = "int(11) NULL";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.String:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Uri:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
default:
mysqlType = "nvarchar(2000) ";
break;
}
entity.Database.ExecuteSqlCommand("alter table " + tableName + " add column " +columName+ " " + mysqlType + ";" + index);
}
}
}
} public class MysqlTableSchema
{
public string tables_in_test { get; set; }
} public class MysqlColumSchema
{
public string field { get; set; }
public string type { get; set; }
public string key { get; set; }
public string Null { get; set; }
public string Extra { get; set; }
} }

  

mysql 动态增加列,查找表中有多少列,具体什么列。 通过JSON生成mysql表 支持子JSON的更多相关文章

  1. SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询

    SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...

  2. SQL面试题:有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列

    .请教一个面试中遇到的SQL语句的查询问题 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列. ------------------- ...

  3. MySQL动态添删改列字段

    动态增加列字段: ); 动态删除列字段: alter table TableName drop column field_id; 动态修改列字段: alter table TableName chan ...

  4. 【实战】如何通过html+css+mysql+php来快速的制作动态网页(以制作一个博客网站为列)

    一.开发环境的搭建 (1)apache+php+mysql环境搭建 因为要用apache来做服务器,mysql作为数据库来存储数据,php来写代码以此实现网页与数据库的交互数据,所以需要下载上述软件, ...

  5. MySQL数据表中有自增长主键时如何插入数据

    原文链接:https://blog.csdn.net/RuobaiMEN/article/details/79794199 MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值 ...

  6. oracle 如何在表中有数据的情况下,修改表字段的类型或者增加表字段的长度

    场景:项目中某张表的字段长度不够用了,现在要增加其长度 分两种情况: 1.表中没有数据的情况,直接一条sql语句就能解决 alter     table    表名    modify(字段名   字 ...

  7. WPF datagrid 动态增加列

    DataGrid动态增加列 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.m ...

  8. MySQL修改表一次添加多个列(字段)和索引

    MySQL修改表一次添加多个列(字段) ALTER TABLE table_name ADD func varchar(50), ADD gene varchar(50), ADD genedetai ...

  9. mysql批量生成修改表和列注释语句

    当我们在一个数据库修改完备注后,需要将其导致另一个服务器上的数据库中,需要生成批量执行语句,方便操作,注意用change 或modified 进行列的属性修改时,没有写全的话会造成其它属性的丢失,如 ...

随机推荐

  1. ISP PIPLINE (一) BLC 以及 线性化

    what is the BlackLevel? 暗电流来源1.raw8为例,单个pixel的有效值是0~255,但是实际AD芯片的精度可能无法将电压值很小的一部分转换出来,芯片厂会刻意添加一个固定的偏 ...

  2. c++ stod很慢

    C++ Convert String to Double Speed (There is also a string-to-int performance test.) A performance b ...

  3. Apache自带压力测试工具----linux环境中ab命令简介及结果分析

    ab(apache bench)是apache下的一个工具,主要用于对web站点做压力测试, 基础用法: 其中-c选项为一次发送的请求数量,及并发量.-n选项为请求次数. 实验测试: [dev@web ...

  4. 软件开发 [CJOJ 1101] [NOIP 模拟]

    Description 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块 ...

  5. 批量操作数据库数据mybatis.xml

    批量插入数据 <insert id="equipment_Add" parameterType="cn.wtsr.core.web.dao.vo.equipment ...

  6. C# 计算地图上某个坐标点的是否在多边形内

    这个方法引用自群友的博客 https://www.xiaofengyu.com/?p=143 使用百度地图的时候,常常会用到判断一个点是否在一个多边形的范围内,该方法用到的是射线法, 通过修改Java ...

  7. 如何实现织梦dedecms表单提交时发送邮箱功能【已解决】

    我们通过织梦系统制作网站时,很多客户需要有在线留言功能,这时就会用到自定义表单.但是很多用户觉得经常登陆后台查看留言信息太麻烦了,于是想能否在提交留言是直接把内容发送到指定邮箱.网站经过测试终于实现了 ...

  8. win7的python3.5安装numpy包

    1.你需要先确保已经安装了pip(因为我是我们需要用pip安装numpy包),我在cmd里面输入pip能显示pip的有关信息,所以我已经安装了pip了(其实是python3.x自带了pip) 如果没有 ...

  9. 团队——League of Programers简介

    团队名称  League of Programers 团队成员简介 武璧泽:编程能力较强,善于程序思路设计: 邹兰兰:擅长代码的分析.编写与调试: 倪彤炜:擅长解决代码的修正与编写,善于调节团队关系: ...

  10. SDN+DPI文献阅读(2)

    A Sophisticated Packet Forwarding Scheme with Deep Packet Inspection in an OpenFlow Switch 来源:Intern ...