根据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每次几十个字段也 ...
随机推荐
- android scrollview 简单的使用
以前写的Scrollview ,通常都是与Listview结合使用,不过因复杂可能新手不太懂,网上有许多文章,这里就不贴那个了DEMO了. 写了个简单的供大家参考:这样比较好理解(需要复杂的可以Q我 ...
- jdk7 中Collections.sort 异常
Collections.sort 异常 java.lang.IllegalArgumentException: Comparison method violates its general contr ...
- module require区别
LUA modue require package 区别 2011-01-19 12:41:35| 分类: 默认分类 | 标签:lua package module require 加载 ...
- ssh 与 Telnet 的区别
简单来书,ssh 和 telnet 是实现相同的功能 , ssh中 数据是经过加密的,是安全的 , 而 Telnet是明文传输的ssh 是加密的,基于 SSL .telnet 是明码传输的,发送的数据 ...
- 【常用小命令】解决windows下有些文件文件名识别不了导致删除不了的问题
在百度上找的解决方案哈,只为自己存档一份. 因为发现现在从csdn上下载的文件都是“.pdf_”格式,下载2个文件,将一个文件格式改成 “.pdf”,另一个文件就扔回不了回收站了, 所以没有办法就找各 ...
- 自定义的GitLab 头像无法正常显示以及URL总是指向localhost
解决指向localhost的问题: 编辑gitlab的配置vi /etc/gitlab/gitlab.rb,修改external_url 参数值 [Mesogene@localhost ~]$ sud ...
- 简单的javascript实例二(随页面滚动广告效果)
方便以后copy 页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "htt ...
- (ZZ)WPF经典编程模式-MVVM示例讲解
http://www.cnblogs.com/xjxz/archive/2012/11/14/WPF.html 本篇从两个方面来讨论MVVM模式: MVVM理论知识 MVVM示例讲解 一,MVVM理论 ...
- Mac系统杂项 (持续更新)
一.调整LaunchPad的图标显示列数和行数 .调整每一列显示图标数量.在我的电脑上(1366 * 768),每列7个个人觉得比较不错 defaults write com.apple.dock s ...
- 日志管理-NLog日志框架简写用法
本文转载:http://www.blogjava.net/qiyadeng/archive/2013/02/27/395799.html 在.net中也有非常多的日志工具,今天介绍下NLog.NLog ...