博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlite3 根据实体自动生成建表语句
阅读量:6042 次
发布时间:2019-06-20

本文共 3308 字,大约阅读时间需要 11 分钟。

 
public class BuildSqlTool    {        public static string GetCreateTableSql(object t)        {            //CREATE TABLE "StructureView2"("Id" INTEGER PRIMARY KEY  AUTOINCREMENT , "IdxNo" VARCHAR, "Name" VARCHAR, "Content" VARCHAR, "Price" FLOAT, "Order" INTEGER)            string sqlStr = "CREATE TABLE \"{0}\" ({1})";            Type type = t.GetType();             PropertyInfo[] pi = type.GetProperties();            string sqlFormat = "\"{0}\" {1}";            string sqlStr2 = "";            foreach (PropertyInfo p in pi)            {               string name=p.Name;               object[]abc=p.GetCustomAttributes(true);               if (name.ToLower()=="id")               {                   sqlStr2 += string.Format(sqlFormat, "Id", "INTEGER PRIMARY KEY  AUTOINCREMENT");               }               else               {                   sqlStr2 +=","+string.Format(sqlFormat, name, SqlType(p));               }             }            return string.Format(sqlStr, GetTableName(type), sqlStr2);        }        static string GetTableName(Type type)        {            var tableAttr = (TableAttribute)type.GetCustomAttributes(typeof(TableAttribute), true).FirstOrDefault();            return tableAttr != null ? tableAttr.Name : type.Name;        }        static string SqlType(PropertyInfo p)        {            Type clrType = p.PropertyType;            if (clrType == typeof(Boolean) || clrType == typeof(Byte) || clrType == typeof(UInt16) || clrType == typeof(SByte) || clrType == typeof(Int16) || clrType == typeof(Int32))            {                return "integer";            }            else if (clrType == typeof(UInt32) || clrType == typeof(Int64))            {                return "bigint";            }            else if (clrType == typeof(Single) || clrType == typeof(Double) || clrType == typeof(Decimal))            {                return "float";            }            else if (clrType == typeof(String))            {                return "varchar";                //int len = MaxStringLength(p);                //return "varchar(" + len + ")";            }            else if (clrType == typeof(DateTime))            {                return "datetime";             }            else if (clrType.IsEnum)            {                 return "integer";            }            else if (clrType == typeof(byte[]))            {                return "blob";            }            else if (clrType == typeof(Guid))            {                return "varchar(36)";            }            else            {                throw new NotSupportedException("Don't know about " + clrType);            }        }                 int MaxStringLength(PropertyInfo p)        {            var attrs = p.GetCustomAttributes(typeof(MaxLengthAttribute), true);            if (attrs.Length > 0)            {                return ((MaxLengthAttribute)attrs[0]).Value;            }            else            {                return 140;            }        }    }

 

 

主要目的是为了减少见表,同理,可自动生成orm的sql

使用范例

// 获取当前程序集

Assembly assembly = Assembly.GetExecutingAssembly();
// 创建类的实例,返回为 object 类型类的完全限定名(即包括命名空间)
object obj = assembly.CreateInstance("ConstructionBudget.Model.VModel1");
string sql = BuildSqlTool.GetCreateTableSql(obj);

转载于:https://www.cnblogs.com/wyxy2005/p/3679492.html

你可能感兴趣的文章
Windows版MySQL5.7修改数据文件目录
查看>>
default、final、static关键字
查看>>
dtmf inband频谱分析
查看>>
set_error_handler 三种用法
查看>>
Excel导出工具类.
查看>>
Python 生成器
查看>>
Code a packet sniffer in python with pcapy exte...
查看>>
Flume单机版安装和测试
查看>>
VC++ 判断文件是否存在
查看>>
hadoop HA 搭建
查看>>
I-O 端口和 I-O 内存
查看>>
Jsp复习(一):基础知识
查看>>
大话C与Lua(一)调用Lua打印Hello world!
查看>>
gradle、module、 project
查看>>
Windows环境下的NodeJS+NPM+Bower安装配置步骤
查看>>
详解Oracle的几种分页查询语句
查看>>
ESB结合门户Portlet实现数据分析
查看>>
python时间函数和常用格式化
查看>>
Configuration options 参数配置
查看>>
码农提高工作效率
查看>>