根据Model有值的自动生成添加的Sql语句
static string Table_Name = ""; /// <summary>
/// model实体中的字段名相对数据库表添加的字段
/// 如:
/// model中一字段名为cm_tableName,
/// 其中tableName为数据库表名
/// 则此变量的值为cm_
/// </summary>
static string Common_Prefix = ""; /// <summary>
/// 泛型获取SQL INSERT字符串
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="md">对象类型参数</param>
/// <returns>返回SQL INSERT语句;调用方法: </returns>
public static String toSqlInsertBuilder<T>(this T md)
{
//要插入的字段
string SQL_STR_INSERT_FIELDS = "";
//要插入的值
string SQL_STR_INSERT_VALUES = "";
string SQL_STR = "";
//获取当前实例的类型
Type type = md.GetType();
//获取实体名(即表名)
String tableName = type.Name.ToString();
//如果表名还没给值,则把表名赋给它
//Table_Name = str; //插入语句的头部
String SQL_STR_INSERT_HEADER = "insert into " + tableName + "(";
//根据类型创建一个空的实体model
object obj = Activator.CreateInstance(type);
//获取所有为Public的字段和实例成员(如果有的话)
PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
//遍历每一个字段
foreach (PropertyInfo p in props)
{
if (p.GetValue(md, null) != null)
{
if (p.Name.ToLower() != "id")
{
//返回传入的实体中此(P)字段的值,如果此值不为空,则进入if方法体内
if (p.GetValue(md, null).ToString().Trim().Length > )
{
SQL_STR_INSERT_FIELDS = SQL_STR_INSERT_FIELDS
//将字段名比数据库字段名多的部分替换掉
//.Replace(Common_Prefix.ToLower().ToString(), "")
+ p.Name.ToLower().ToString() + ",";
SQL_STR_INSERT_VALUES = SQL_STR_INSERT_VALUES + "', '"
+ p.GetValue(md, null).ToString().Trim();
}
}
}
}
//
if (SQL_STR_INSERT_FIELDS.ToString().Trim().Length > )
{
SQL_STR = SQL_STR_INSERT_HEADER
+ SQL_STR_INSERT_FIELDS.Substring(, SQL_STR_INSERT_FIELDS.Length - )
+ ")values(" + SQL_STR_INSERT_VALUES.Substring(, SQL_STR_INSERT_VALUES.Length - )
+ "');";
}
return SQL_STR;
} public static String SqlInsertBuilder(DataSet Ds)
{
DataTable dt = new DataTable();
if (Ds != null)
{
if (Ds.Tables.Count > )
{
dt = Ds.Tables[];
}
}
String SQL_STR_INSERT_HEADER = "insert into mytablename(";
string SQL_STR_INSERT_FIELDS = "";
string SQL_STR_INSERT_VALUES = "";
string SQL_STR = "";
if (dt.Rows.Count > )
{
SQL_STR = "";
foreach (DataRow dr in dt.Rows)
{
SQL_STR_INSERT_HEADER = "insert into mytablename(";
SQL_STR_INSERT_HEADER = SQL_STR_INSERT_HEADER.Replace("mytablename", Table_Name.ToString());
SQL_STR_INSERT_FIELDS = "";// SQL_STR_INSERT_FIELDS + dc.ColumnName.ToLower().ToString() + ",";
SQL_STR_INSERT_VALUES = "";//SQL_STR_INSERT_VALUES + "', '" + dr[dc.ColumnName].ToString().Trim();
foreach (DataColumn dc in dt.Columns)
{
if (dr[dc.ColumnName].ToString().Trim().Length > )
{
SQL_STR_INSERT_FIELDS = SQL_STR_INSERT_FIELDS
+ dc.ColumnName.ToLower().ToString() + ",";
SQL_STR_INSERT_VALUES = SQL_STR_INSERT_VALUES
+ "', '" + dr[dc.ColumnName].ToString().Trim();
}
}
if (SQL_STR_INSERT_FIELDS.ToString().Trim().Length > )
{
SQL_STR = SQL_STR + SQL_STR_INSERT_HEADER
+ SQL_STR_INSERT_FIELDS.Substring(, SQL_STR_INSERT_FIELDS.Length - )
+ ")values(" + SQL_STR_INSERT_VALUES.Substring(, SQL_STR_INSERT_VALUES.Length - )
+ "');";
}
}
}
return SQL_STR;
} public static String SqlInsertBuilder(DataTable dt)
{
String SQL_STR_INSERT_HEADER = "insert into mytablename(";
string SQL_STR_INSERT_FIELDS = "";
string SQL_STR_INSERT_VALUES = "";
string SQL_STR = "";
if (dt.Rows.Count > )
{
SQL_STR = "";
foreach (DataRow dr in dt.Rows)
{
SQL_STR_INSERT_HEADER = "insert into mytablename(";
SQL_STR_INSERT_HEADER = SQL_STR_INSERT_HEADER.Replace("mytablename", Table_Name.ToString());
SQL_STR_INSERT_FIELDS = "";
SQL_STR_INSERT_VALUES = "";
foreach (DataColumn dc in dt.Columns)
{
if (dr[dc.ColumnName].ToString().Trim().Length > )
{
SQL_STR_INSERT_FIELDS = SQL_STR_INSERT_FIELDS
+ dc.ColumnName.ToLower().ToString() + ",";
SQL_STR_INSERT_VALUES = SQL_STR_INSERT_VALUES
+ "', '" + dr[dc.ColumnName].ToString().Trim();
}
}
if (SQL_STR_INSERT_FIELDS.ToString().Trim().Length > )
{
SQL_STR = SQL_STR + SQL_STR_INSERT_HEADER
+ SQL_STR_INSERT_FIELDS.Substring(, SQL_STR_INSERT_FIELDS.Length - )
+ ")values(" + SQL_STR_INSERT_VALUES.Substring(, SQL_STR_INSERT_VALUES.Length - )
+ "');";
}
}
}
return SQL_STR;
}
根据Model有值的自动生成添加的Sql语句的更多相关文章
- C#——反射,自动生成添加的SQL语句
C#中的反射.是C#中特别重要也是特别神奇的特性,对后面学习框架,了解框架的原理.以及自己写框架,都是必不可少的.学习反射的过程中.总给我一种茅塞顿开的感觉,以前不懂的,现在懂了 反射的介绍:http ...
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
IT咨询顾问:一次吐血的项目救火 年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...
- 使用LINQ生成Where的SQL语句
实例1-使用实例-单个语句: ; List<, , }; List<User_info> userInfoList = UserCenterBus.Select_WebSiteBas ...
- LinqToDB 源码分析——生成与执行SQL语句
生成SQL语句的功能可以算是LinqToDB框架的最后一步.从上一章中我们可以知道处理完表达式树之后,相关生成SQL信息会被保存在一个叫SelectQuery类的实例.有了这个实例我们就可以生成对应的 ...
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...
- Python 一键拉取Git分支源码自动解析并执行SQL语句
基于Python实现自动拉取Git分支源码自动解析并执行SQL语句 by:授客 QQ:1033553122 1.代码用途 开发过程中,研发人员会提交SQL更新脚本到Git源码库,然后测试负责去拉取这些 ...
- ADO.NET 根据实体类自动生成添加修改语句仅限Oracle使用
话不多说直接上代码,新手上路,高手路过勿喷,请多多指教. /// <summary> /// 等于号 /// </summary> ) + Convert.ToChar() + ...
- Oracle 自动生成hive建表语句
从 oracle 数据库导数到到 hive 大数据平台,需要按照大数据平台的数据规范,重新生成建表的 SQL 语句,方便其间,写了一个自动生成SQL的存储过程. ① 创建一张表,用来存储源表的结构,以 ...
- php如何妩媚地生成执行的sql语句
会不会碰到这样一种情况呢?每次获取数据将数据和历史版本都有一定的差别,然而用ThinkPHP的addAll()函数,却会将已有的数据删掉再重新写入.这明显不是我们想要的.但自己写sql每次几十个字段也 ...
随机推荐
- struts.xml配置文件标签详解
1.package: 作用:分模块化开发. 属性: name:包名. extends:由于struts2框架的一些核心功能的配置都在struts-default包中,所以一般都都直接或间接地继承str ...
- Java获取客户端真实IP地址的两种方法
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- 【取对数+科学计数法】【HDU1060】 N^N
Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- MVC学习 (一)
在学习MVC之前对asp.net MVC已经有了一些了解,但是还是有很多的疑问,接下来我慢慢来看书学习并带着问题写博客以作记录. 1.MVC是什么? 2.Asp.net MVC和传统的Asp.net ...
- java学习之数据库
第一部分:DB2基础知识 一.复习 jre jdk jvm path classpath 二.数据库基础-DB2 1.访问172.22.602.24/ temp 123 2.安装检查 db2cmd d ...
- 数据结构算法应用C++语言描述——(1)C++基础知识
一.二维数组 (1)二维数组的列是固定时,行未知时使用动态分配 当一个二维数组每一维的大小在编译时都是已知时,可以采用类似于创建一维数组的语法 来创建二维数组.例如,一个类型为char的7×5数组可用 ...
- C++标准库之泛型算法
本文中算法都是指泛型算法. 基本要点: 1)算法使用迭代器进行操作. 2)不依赖容器,但容器希望使用算法,就必须提供接口. 3)通用算法永远不会执行容器操作.操作仅指:更改容器大小的操作.但,容器内部 ...
- DOMDocument类文件
http://php.net/manual/en/class.domdocument.php <?php $xml = <<< XML <?xml version=&qu ...
- 关于MySQL性能的比较
需求:在传递一组职位编号的时候,需要统计该职位的 当天的投递情况 和 有历史记录以来总的投递量 解决方案一: 每次都进行一次数据库查询,遍历职位id,再根据职位id去查询相应时间内的投递量 /** * ...
- PHP环境搭配
电脑上如果有apache,必须先卸载了先,如果有集成的环境,类似于apmserver,也必须先停止先.不然安装的时候,会出现修复和卸载选项,而不是典型安装跟用户自定义安装. apache安装目录 E: ...