C#使用反射根据实体生成sql语句(添加和批量添加)

  最近碰上这个一个需求,需要写一个接口,将穿进来的参数,存储到数据库里,但是存到哪个库,哪个表,不确定,需要根据参数去判断,但数据结构是固定的,因为表名不是固定的,所以这就很麻烦了,不能用EF直接去add或者是addRange了。需要自己去拼sql语句。

  但是本人比较懒,懒得去写sql语句,所以就写了一个自动生成Insert语句的通用方法,代码如下

/// <summary>/// 对象拼接sql语句/// </summary>public class SqlBuilderHelper{/// <summary>/// Insert SQL语句/// </summary>/// <param name="obj">要转换的对象,不可空</param>/// <param name="tableName">要添加的表明,不可空</param>/// <returns>////// sql语句/// </returns>public static string InsertSql<T>(T t, string tableName) where T : class{if (t == null || string.IsNullOrEmpty(tableName)){return string.Empty;}string columns = GetColmons(t);if (string.IsNullOrEmpty(columns)){return string.Empty;}string values = GetValues(t);if (string.IsNullOrEmpty(values)){return string.Empty;}StringBuilder sql = new StringBuilder();sql.Append("Insert into " + tableName);sql.Append("(" + columns + ")");sql.Append(" values(" + values + ")");return sql.ToString();}/// <summary>/// BulkInsert SQL语句(批量添加)/// </summary>/// <typeparam name="T">类型</typeparam>/// <param name="objs">要转换的对象集合,不可空</param>/// <param name="tableName">>要添加的表明,不可空</param>/// <returns>////// sql语句/// </returns>public static string BulkInsertSql<T>(List<T> objs, string tableName) where T : class{if (objs == null || objs.Count == 0 || string.IsNullOrEmpty(tableName)){return string.Empty;}string columns = GetColmons(objs[0]);if (string.IsNullOrEmpty(columns)){return string.Empty;}string values = string.Join(",", objs.Select(p => string.Format("({0})", GetValues(p))).ToArray());StringBuilder sql = new StringBuilder();sql.Append("Insert into " + tableName);sql.Append("(" + columns + ")");sql.Append(" values " + values + "");return sql.ToString();}/// <summary>/// 获得类型的列名/// </summary>/// <param name="obj"></param>/// <returns></returns>private static string GetColmons<T>(T obj){if (obj == null){return string.Empty;}return string.Join(",", obj.GetType().GetProperties().Select(p => p.Name).ToList());}/// <summary>/// 获得值/// </summary>/// <param name="obj"></param>/// <returns></returns>private static string GetValues<T>(T obj){if (obj == null){return string.Empty;}return string.Join(",", obj.GetType().GetProperties().Select(p => string.Format("'{0}'", p.GetValue(obj))).ToArray());}}

   修改也写好了,C#根据反射生成sql语句(Update语句)

  这个可以直接使用,有需要的朋友可以直接复制走。

  有什么问题欢迎随时交流。

 

转载于:https://www.cnblogs.com/Yuuuuu/p/8688237.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7种情绪,人类心智的通用模块

来源&#xff1a;混沌巡洋舰1859年&#xff0c;达尔文以一个挑衅性的断言结束了他的《物种起源》&#xff0c;那就是‘人类的起源和他的历史将会被&#xff08;进化&#xff09;点亮’。在他的后期著作《人类的由来》(1和《人类与动物的情感表达》中&#xff0c;达尔文阐明了人…

gitbook mysql_使用Gitbook做笔记

一、安装# 通过npm全局安装npm install gitbook-cli -g# 查看版本gitbook --version二、创建一本书2.1 本地创建# 创建一个文件夹mkdir mysql-note# 初始化cd mysql-notegitbook init# 会创建两个文件# README.md 书皮# SUMMARY.md 目录# 从本地打开这本书gitbook serve# 将md文…

python map函数返回类型_使用map和lambda函数发送两个参数并返回两个值

因为您说您只需要一个模型&#xff0c;而不是每个值都需要一个新模型&#xff0c;所以这相当简单。更改&#xff1a;hnd map(lambda (valua): function_f(valua), list_value)致&#xff1a;model ... initialize a model that will be passed to every call ...hnd map(lam…

03、数据类型(02)

字典&#xff08;dict&#xff09; 字典是一种映射型的数据类型&#xff0c;每个元素成对出现&#xff0c;即key- value,每对元素key 和 value“&#xff1a;”冒号分开&#xff0c;元素之间用逗号隔开&#xff0c;整个字典包括子在{}中。 字典中的“key”必须是不可变类型&am…

器官复刻、脑机接口、电子皮肤…这些前沿科学或改写人类未来

来源&#xff1a;MEMS“2020年&#xff0c;新冠疫情爆发&#xff0c;面对困境&#xff0c;我们采取的行动将很可能改写这个时代。” 11月7日&#xff0c;2020腾讯科学WE大会线上举行。腾讯首席探索官网大为在开场演讲中表示&#xff0c;前沿科学突破能帮助我们做好准备拥抱未来…

pythongui管理系统项目_Python实现GUI学生信息管理系统

本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下项目环境&#xff1a;软件环境:OS:RedHat6.3Lib:PygtkLanguage:PythonSupport tool:Glade3项目简述&#xff1a;①Glade3设计用户的登录窗口&#xff0c;功能主窗口…

mysql8 修改加密方式_mysql8修改密码加密方式

mysql8用navicat可视化连接会报错加密方式错误&#xff0c;想要连接mysql8有两种方式1&#xff1a;安装MySQL8客户端2&#xff1a;修改MySQL8的密码加密方式我采用的是第二种&#xff0c;因为服务器上是MySQL8&#xff0c;而我本地是MySQL5&#xff0c;不想在装一个MySQL8&…

Python 操作Excel文件

https://blog.csdn.net/weixin_36279318/article/details/79151225转载于:https://www.cnblogs.com/wu-chao/p/8689120.html

GPT-3:人工智能的新突破

来源&#xff1a;王宏琳科学网博客在过去几个月里&#xff0c;占据海外科技新闻头条主导地位的、人工智能领域最令人兴奋的新事物之一是GPT-3——OpenAI的新的文本生成程序&#xff0c;一种由神经网络驱动的语言模型&#xff0c;一个根据人类用户的提示自动生成文本的人工智能引…

python童年_300行Python代码实现俄罗斯方块,致敬逝去的童年

原标题&#xff1a;300行Python代码实现俄罗斯方块&#xff0c;致敬逝去的童年本文代码基于 python3.6 和 pygame1.9.4。俄罗斯方块是儿时最经典的游戏之一&#xff0c;刚开始接触 pygame 的时候就想写一个俄罗斯方块。但是想到旋转&#xff0c;停靠&#xff0c;消除等操作&…

安装织梦系统

织梦系统安装 步骤 1 mkdir /datayum -y install httpd*yum -y install mysql-community-release-el7-5.noarch.rpm wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm yum -y install mysql-community-release-el7-5.noarch.rpmyum install mysql-servers…

把 mysql 整个加载进内存磁盘中_MySQL 缓冲池 是什么?

Mysql 中数据是要落盘的&#xff0c;这点大家都知道。读写磁盘速度是很慢的&#xff0c;尤其和内存比起来更是没的说。但是&#xff0c;我们平时在执行 SQL 时&#xff0c;无论写操作还是读操作都能很快得到结果&#xff0c;并没有预想中的那么慢。可能你会说我有索引啊&#x…

Cell重磅:记忆研究的突破进展!在诺奖成果基础上,用“全光学”组合来“操纵记忆”...

来源&#xff1a;brainnews这项发表在《细胞》杂志上的研究&#xff0c;解释了研究人员如何利用双光子钙成像和双光子光遗传学的“全光学”组合&#xff0c;同时读写小鼠“位置细胞”&#xff08;神经元的一种&#xff09;中的活动&#xff0c;而这种细胞可以在虚拟现实环境中进…

mysql like 多个条件_千万级MySQL数据库这样建索引可以让你的数据库飞起来.........

创建索引常用规则1、表的主键、外键必须有索引&#xff1b;2、数据量超过300的表应该有索引&#xff1b;3、经常与其他表进行连接的表&#xff0c;在连接字段上应该建立索引&#xff1b;4、经常出现在Where子句中的字段&#xff0c;特别是大表的字段&#xff0c;应该建立索引&a…

mysql主从配置访问_Mysql主从配置,实现读写分离

大型网站为了软解大量的并发访问&#xff0c;除了在网站实现分布式负载均衡&#xff0c;远远不够。到了数据业务层、数据访问层&#xff0c;如果还是传统的数据结构&#xff0c;或者只是单单靠一台服务器扛&#xff0c;如此多的数据库连接操作&#xff0c;数据库必然会崩溃&…

jquery显示和隐藏元素

1、$(#id).show()/$(#id).hide()/$(#id).toggle() 2、$(#id).css(display,none)/$(#id).css(display,block) 3、$("#id")[0].style.display none; 转载于:https://www.cnblogs.com/shengulong/p/8693504.html

靠脑机接口“隔空探物”,大脑植入芯片可实现“心灵感应”

来源&#xff1a;脑极体1979年&#xff0c;在四川大足县的12岁农村少年唐雨突然具有了“耳朵识字”的神通。原本是当地的一件稀罕的谈资&#xff0c;结果后来引起了当地媒体的报道&#xff0c;后来又居然经过中国的权威科技期刊《自然杂志》的“确证”和香港《明报》&#xff0…

android app 适应不同大小屏幕_移动APP测试:Android屏幕适配问题二

设计选择性的布局和图片&#xff0c;替代资源的类型&#xff0c;取决于应用程序的需求。通常&#xff0c;应该使用尺寸和方向限定符提供选择性的布局资源&#xff0c;使用密度限定符提供选择性的图片资源。以下部分分别概括了该如何使用尺寸和密度限定符提供选择性的布局和图片…

python的神经网络编程_Python神经网络编程 第二章 使用Python进行DIY

使用神经网络识别手写数字&#xff1a;import numpy# scipy.special for the sigmoid function expit()&#xff0c;即S函数import scipy.special# library for plotting arraysimport matplotlib.pyplot# ensure the plots are inside this notebook, not an external window%…

使用node中的express解决vue-cli加载不到dev-server.js的问题

在使用vue开发过程中&#xff0c;难免需要去本地数据地址进行请求&#xff0c;而原版配置在dev-server.js中&#xff0c;新版vue-webpack-template已经删除dev-server.js&#xff0c;改用webpack.dev.conf.js代替&#xff0c;所以 配置本地访问在webpack.dev.conf.js里配置即可…