using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection; namespace TableGenerator
{
class Program
{
static void Main(string[] args)
{
List<TableClass> tables = new List<TableClass>(); // Pass assembly name via argument
Assembly a = Assembly.LoadFile(args[]); Type[] types = a.GetTypes(); // Get Types in the assembly.
foreach (Type t in types)
{
TableClass tc = new TableClass(t);
tables.Add(tc);
} // Create SQL for each table
foreach (TableClass table in tables)
{
Console.WriteLine(table.CreateTableScript());
Console.WriteLine();
} // Total Hacked way to find FK relationships! Too lazy to fix right now
foreach (TableClass table in tables)
{
foreach (KeyValuePair<String, Type> field in table.Fields)
{
foreach (TableClass t2 in tables)
{
if (field.Value.Name == t2.ClassName)
{
// We have a FK Relationship!
Console.WriteLine("GO");
Console.WriteLine("ALTER TABLE " + table.ClassName + " WITH NOCHECK");
Console.WriteLine("ADD CONSTRAINT FK_" + field.Key + " FOREIGN KEY (" + field.Key + ") REFERENCES " + t2.ClassName + "(ID)");
Console.WriteLine("GO"); }
}
}
}
}
} public class TableClass
{
private List<KeyValuePair<String, Type>> _fieldInfo = new List<KeyValuePair<String, Type>>();
private string _className = String.Empty; private Dictionary<Type, String> dataMapper
{
get
{
// Add the rest of your CLR Types to SQL Types mapping here
Dictionary<Type, String> dataMapper = new Dictionary<Type, string>();
dataMapper.Add(typeof(int), "BIGINT");
dataMapper.Add(typeof(string), "NVARCHAR(500)");
dataMapper.Add(typeof(bool), "BIT");
dataMapper.Add(typeof(DateTime), "DATETIME");
dataMapper.Add(typeof(float), "FLOAT");
dataMapper.Add(typeof(decimal), "DECIMAL(18,0)");
dataMapper.Add(typeof(Guid), "UNIQUEIDENTIFIER"); return dataMapper;
}
} public List<KeyValuePair<String, Type>> Fields
{
get { return this._fieldInfo; }
set { this._fieldInfo = value; }
} public string ClassName
{
get { return this._className; }
set { this._className = value; }
} public TableClass(Type t)
{
this._className = t.Name; foreach (PropertyInfo p in t.GetProperties())
{
KeyValuePair<String, Type> field = new KeyValuePair<String, Type>(p.Name, p.PropertyType); this.Fields.Add(field);
}
} public string CreateTableScript()
{
System.Text.StringBuilder script = new StringBuilder(); script.AppendLine("CREATE TABLE " + this.ClassName);
script.AppendLine("(");
script.AppendLine("\t ID BIGINT,");
for (int i = ; i < this.Fields.Count; i++)
{
KeyValuePair<String, Type> field = this.Fields[i]; if (dataMapper.ContainsKey(field.Value))
{
script.Append("\t " + field.Key + " " + dataMapper[field.Value]);
}
else
{
// Complex Type?
script.Append("\t " + field.Key + " BIGINT");
} if (i != this.Fields.Count - )
{
script.Append(",");
} script.Append(Environment.NewLine);
} script.AppendLine(")"); return script.ToString();
}
}
}
public class FakeDataClass
{
public int AnInt
{
get;
set;
} public string AString
{
get;
set;
} public float AFloat
{
get;
set;
} public FKClass AFKReference
{
get;
set;
}
} public class FKClass
{
public int AFKInt
{
get;
set;
}
}

以下代码是生成my sql 的create datatable sql

private void btnCreateSQL_Click(object sender, EventArgs e)
{
//txtJson.Text
//txtSQL.Text
try
{
string sepMark = " ";
JObject jo = JObject.Parse(txtJson.Text);
string sql = @"CREATE TABLE NND(" + Environment.NewLine;
sql = sql + @"NND_id mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT 'NND_id',";
foreach (var j in jo)
{
if ("Integer".Equals(j.Value.Type.ToString()))
{
if (j.Key.Contains("is_") || j.Key.Contains("type"))
{
sql = sql + j.Key + sepMark + @"tinyint(4) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
}
else
{
sql = sql + j.Key + sepMark + @"mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT" + sepMark + "'" + j.Value + "'," + Environment.NewLine;
}
}
else if ("String".Equals(j.Value.Type.ToString()))
{
decimal tempDecimal = ;
DateTime dt = new DateTime();
if (decimal.TryParse(j.Value.ToString(), out tempDecimal))
{
sql = sql + j.Key + sepMark + @"decimal(11,2) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
continue;
}
if (DateTime.TryParse(j.Value.ToString(), out dt))
{
sql = sql + j.Key + sepMark + @"datetime NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
continue;
}
else
{
sql = sql + j.Key + sepMark + @"varchar(50) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
continue;
}
}
}
sql = sql + @"PRIMARY KEY (NND_id)" + Environment.NewLine;
sql = sql + ")";
txtSQL.Text = sql;
}
catch (Exception ex)
{
txtSQL.Text = "出错啦!~~~~~~~~~~~~~~" + Environment.NewLine + ex.Message;
}
}

C#实体类生成Create Table SQL的更多相关文章

  1. EF:根据实体类生成表结构SQL

    根据实体类生成表结构SQL: PM> Enable-Migrations -ProjectName Domain -StartUpProjectName Handler -Force PM> ...

  2. 通过实体类生成建表SQL语句实现方法

    import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.ut ...

  3. C# T4 模板 数据库实体类生成模板(带注释,娱乐用)

     说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程    1.htt ...

  4. SQL Server: create table sql script

    ---摇奖observeh数据库设计 Function getSpace lottery /* -- Author:geovindu 涂聚文 -- Date: 20180427 为了自写生成代码.根据 ...

  5. 【干货分享】C# 实体类生成工具

    前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...

  6. C#实体类生成XML与XML Schema文档

    一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...

  7. Jpa实体类生成图解

    Jpa实体类生成图解   创建连接     创建项目  

  8. [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码

    前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...

  9. Java代码实体类生成SQL语句(Java实体类转数据库)

    有的时候把数据库删了,如果照着实体类重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体类转换为SQL语句输出为一个文件,打开执行命令即可. 下载:ht ...

随机推荐

  1. flockfile, ftrylockfile, funlockfile - 为标准输入输出锁定文件 FILE

    SYNOPSIS 总览 #include <stdio.h> void flockfile(FILE *filehandle); int ftrylockfile(FILE *fileha ...

  2. windows下挂载NFS共享目录

    1.在打开或关闭Windows功能中,选择安装NFS客户端 2.在命令行中,输入“mount \\172.24.184.31\data x:\”,输入mount查看详细挂载参数(注意此时uid.gid ...

  3. Codeforces 912 质因数折半 方格数学期望

    A B #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #d ...

  4. Hive 笔试题

    Hive 笔试题 考试时间: 姓名:____________ 考试成绩:____________ 考试时长:180 分钟 注意事项: 1. 自主答题,不能参考任何除本试卷外的其它资料. 2. 总成绩共 ...

  5. pyqt5-QAbstractScrollArea滚动条

    继承  QObject-->QWidget-->QFrame-->QAbstractScrollArea 是抽象类 import sys from PyQt5.QtWidgets i ...

  6. JS高阶函数--------map、reduce、filter

    一.filter filter用于对数组进行过滤.它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素. 注意: filter() 不会对空数组进行检测. 注意: filter() ...

  7. DNS域名解析系统

    1.DNS的组成 DNS系统是为解析域名为IP地址而存在的,它是由域名空间.资源记录.名称服务器和解析器组成. 域名空间是包含一个树状结构,用于存储资源记录的空间. 资源记录是与域名相关的数据,如IP ...

  8. 百度小程序 配置 app.json 文件

    可以通过配置 app.json 文件,设置 SWAN 的界面.路径.多 TAB 等. app.json 配置项列表如下 属性 类型 必填 描述 pages Array.<string> 是 ...

  9. 陨石坑之webapi 使用filter中如何结束请求流

    先看下正常的结束asp.net 请求流怎么写的 System.Web.HttpContext.Current.Response.Write(“end”); System.Web.HttpContext ...

  10. ES6 Object.setPrototypeOf ()方法和defineProperty()方法的使用

    将一个指定的对象的原型设置为另一个对象或者null(既对象的[[Prototype]]内部属性). 示例: <script type="text/javascript"> ...