MySQL生成模型
根据数据库表生成Model
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using MySql.Data.MySqlClient; namespace ClassLibrary
{
/// <summary>
/// 生成模型
/// </summary>
public static class GenerativeModel
{
#region 获取服务器所有库 MySQL_GetDBs
/// <summary>
/// 获取服务器所有库
/// </summary>
/// <param name="connStr">连接字符串</param>
/// <returns></returns>
public static List<string> MySQL_GetDBs(string connStr)
{
return GetListString(connStr, "SHOW DATABASES");
}
#endregion #region 获取数据库所有表 MySQL_GetTables
/// <summary>
/// 获取数据库所有表
/// </summary>
/// <param name="connStr">连接字符串</param>
/// <returns></returns>
public static List<string> MySQL_GetTables(string connStr)
{
return GetListString(connStr, "SHOW TABLES");
}
#endregion #region 获取MySQL实体类 MySQL_GetModel
#region 获取MySQL实体类
/// <summary>
/// 获取MySQL实体类
/// </summary>
/// <param name="connStr">连接字符串</param>
/// <param name="tableName">表名</param>
/// <param name="modelName">生成模型名</param>
/// <param name="spaceName">模型命名空间名</param>
/// <returns></returns>
public static string MySQL_GetModel(string connStr, string tableName, string modelName, string spaceName)
{
try
{
List<MySQLTable> ls = MySQLHelp.GetList<MySQLTable>(connStr, "SHOW FULL FIELDS FROM " + tableName);
StringBuilder sb = new StringBuilder();
sb.Append("using System;\nusing System.Collections.Generic;\n");//引用基础类库
sb.AppendFormat("namespace {0}", spaceName).Append("\n{\n");//命名空间
sb.AppendFormat("\tpublic class {0}", modelName).Append("\n\t{\n");//类
foreach (var item in ls)
{
sb.AppendFormat("\t\t///<summary>\n\t\t///{0}\n\t\t///</summary>\n", item.Comment);//注释
string field = item.Field.Substring(, ).ToUpper() + item.Field.Substring();//字段名
sb.AppendFormat("\t\tpublic {0} {1} ", typeConvert(item.Type), field).Append("{get;set;}\n");//添加属性
}
sb.Append("\t}\n}");
return sb.ToString();
}
catch (System.Exception)
{
}
return null;
}
#endregion #region MySQL类型转换成C#类型
private static string typeConvert(string type)
{
type = type.ToLower();
if (type.StartsWith("varchar") || type.StartsWith("char") || type.StartsWith("enum"))
{
return "string";
}
if (type.StartsWith("date") || type.StartsWith("datetime"))
{
return "DateTime";
}
if (type.StartsWith("int") || type.StartsWith("tinyint") || type.StartsWith("smallint") || type.StartsWith("mediumint"))
{
return "int";
};
if (type.StartsWith("bigint"))
{
return "long";
};
if (type.StartsWith("double") || type.StartsWith("float"))
{
return "double";
}
if (type.StartsWith("decimal"))
{
return "decimal";
}
return "[类型]";
}
#endregion #region 表结构
public class MySQLTable
{
/// <summary>
/// 字段名
/// </summary>
public string Field { get; set; }
/// <summary>
/// 字段类型
/// </summary>
public string Type { get; set; }
/// <summary>
///
/// </summary>
public string Collation { get; set; }
/// <summary>
/// 是否可为null
/// </summary>
public string Null { get; set; }
/// <summary>
///
/// </summary>
public string Key { get; set; }
/// <summary>
/// 默认值
/// </summary>
public string Default { get; set; }
/// <summary>
///
/// </summary>
public string Extra { get; set; }
/// <summary>
///
/// </summary>
public string Privileges { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Comment { get; set; } }
#endregion
#endregion #region 获取DataReader
/// <summary>
/// 获取DataReader
/// </summary>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="comText">SQL语句</param>
/// <returns>DataReader</returns>
public static MySqlDataReader ExecuteDataReader(string connStr, string comText)
{
MySqlConnection conn = new MySqlConnection(connStr);
MySqlCommand com = new MySqlCommand();
if (conn.State == ConnectionState.Closed) { conn.Open(); }
com.Connection = conn;
com.CommandType = CommandType.Text;
com.CommandText = comText;
return com.ExecuteReader(CommandBehavior.CloseConnection);
}
#endregion #region 获取List<string>
/// <summary>
/// 获取List
/// </summary>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="comText">SQL语句</param>
/// <returns></returns>
private static List<string> GetListString(string connStr, string cmdText)
{
try
{
List<string> ls = new List<string>();
MySqlDataReader read = ExecuteDataReader(connStr, cmdText);
while (read.Read())
{
for (int i = ; i < read.FieldCount; i++)
{
if (read[i] != DBNull.Value)
{
ls.Add(read[i].ToString());
}
}
}
return ls;
}
catch (System.Exception)
{
return null;
}
}
#endregion #region 获取List<T>
/// <summary>
/// 获取List
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="comText">SQL语句</param>
/// <returns></returns>
public static List<T> GetList<T>(string connStr, string comText) where T : class,new()
{
MySqlDataReader read = ExecuteDataReader(connStr, comText);
List<T> ls = (read.HasRows ? new List<T>() : null);//是否有数据
while (read.Read())
{
Type type = typeof(T);//获取类型
T t = new T();//创建实例
foreach (var item in type.GetProperties())//取出属性
{
for (int i = ; i < read.FieldCount; i++)
{
if (item.Name.ToLower() == read.GetName(i).ToLower() && read[i] != DBNull.Value)//属性名与查询出来的列名比较,且至不能为null
{
item.SetValue(t, read[i], null);
break;
}
}
}
ls.Add(t);
};
return ls;
}
#endregion
}
}
MySQL生成模型的更多相关文章
- EF6添加mysql的edmx实体时报错:无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull
EF6.1.3 ,使用mysql5.7的实体数据模型时,提示: 由于出现以下异常,无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中 ...
- EF生成模型出现异常:表“TableDetails“中列“IsPrimaryKey”的值为DBNull解决方法
Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:"表"TableDetails"中列"IsPrimaryKey"的值 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5 从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数 ...
- 生成模型(Generative Model)与判别模型(Discriminative Model)
摘要: 1.定义 2.常见算法 3.特性 4.优缺点 内容: 1.定义 1.1 生成模型: 在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下.它给观测值和标 ...
- 生成模型(Generative)和判别模型(Discriminative)
生成模型(Generative)和判别模型(Discriminative) 引言 最近看文章<A survey of appearance models in visual object ...
- 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...
- HMM 自学教程(二)生成模型
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- highcharts实例教程二:结合php与mysql生成饼图
上回我们分析了用highcharts结合php和mysql生成折线图的实例,这次我们以技术cto网站搜索引擎流量为例利用highcharts生成饼图. 饼图通常用在我们需要直观地显示各个部分所占的比例 ...
- 生成模型(generative model)与判别模型(discriminative model)的区别
监督学习可以分为生成方法与判别方法,所学到的模型可以分为生成模型与判别模型. 生成模型 生成模型由数据学习联合概率分布\(P(X,Y)\),然后求出条件概率分布\(P(Y|X)\)作为预测的模型,即生 ...
随机推荐
- wordpress 函数、条件判断以及文件的总结
WordPress基本模板文件 一套完整的WordPress模板应至少具有如下文件: style.css : CSS(样式表)文件 index.php : 主页模板 archive.php : Arc ...
- C++项目中的extern "C" {}
from:http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html C++项目中的extern "C" {} 20 ...
- NOIP2009 Hankson的趣味题
题目描述 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考一个有趣的问题.今天在 ...
- ZOJ 3696 Alien's Organ
泊松分布.... Alien's Organ Time Limit: 2 Seconds Memory Limit: 65536 KB There's an alien whose name ...
- 如何让自己的app尽量不被系统杀死
1. 在Service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建 @Override public int onStartComman ...
- word20161210
gateway / 网关 gateway account / 网关帐户 Gateway Service for NetWare / NetWare 网关服务 GDI objects / GDI 对象 ...
- %格式化和format格式化--python
格式符 %[(name)][floags][width].[precision]typecode (name) 可选,用于选择指定的key flags 可选,可提供的值有: · + 右对齐,整数前加正 ...
- POJ推荐50题
此文来自北京邮电大学ACM-ICPC集训队 此50题在本博客均有代码,可以在左侧的搜索框中搜索题号查看代码. 以下是原文: POJ推荐50题1.标记“难”和“稍难”的题目可以看看,思考一下,不做要求, ...
- objccn-iOS上的相机捕捉
在第一台iPhone时,在app里面整合相机的唯一方法就是使用UIImagePickerController.到了iOS4,发布了更灵活的AVFoundation框架. UIImagePickerCo ...
- java学习第三天 数组
java中数组一样存在多维,二维数组,三维数组..... 二维数组的定义 格式: 数据类型 [][] 数组名 = new 数据类型 [][]; 动态初始化 数据类型[][] 数组名 = new 数 ...