SQLSERVER单表CRUD通用方法
一、适用场景
①当你书写简单的增删改查心累了
②当你的项目不考虑并发、高性能
③当你追求更快速的开发效率
④当你的业务只涉及单表
二、代码展示
①单表Insert
public bool Insert<T>(T t)
{
var o = t.GetType();
var sBulider = new StringBuilder("insert into ");
sBulider.Append("[" + o.Name + "]");
sBulider.Append("(");
var properties = o.GetProperties();
foreach (var p in properties)
{
sBulider.Append(p.Name);
sBulider.Append(",");
}
sBulider.Length--;
sBulider.Append(") values(");
foreach (var p in properties)
{
sBulider.AppendFormat("'{0}'", p.GetValue(t, null));
sBulider.Append(",");
}
sBulider.Length--;
sBulider.Append(")");
return SqlDBHelper.ExecuteSql(sBulider.ToString()) > ;
}
②单表Delete
public bool Delete<T>(string idList) where T : new()
{
var tableName = new T().GetType().Name;
var ids = new StringBuilder();
foreach (var id in idList.Split(','))
{
ids.Append("'");
ids.Append(id);
ids.Append("',");
}
ids.Length--;
var sql = string.Format("delete from [{0}] where Id in ({1})", tableName, ids.ToString());
return SqlDBHelper.ExecuteSql(sql) > ;
}
③单表Update
public bool Update<T>(T t)
{
var o = t.GetType();
var sBulider = new StringBuilder("update ");
sBulider.Append("[" + o.Name + "]");
sBulider.Append(" set ");
var id = "";
var properties = o.GetProperties();
foreach (var p in properties)
{
var columnName = p.Name;
var columnValue = p.GetValue(t, null);
if (columnName == "Id")
id = columnValue.ToString();
sBulider.Append(columnName);
sBulider.AppendFormat("='{0}'", columnValue);
sBulider.Append(",");
}
sBulider.Length--;
sBulider.AppendFormat("where Id='{0}'", id);
return SqlDBHelper.ExecuteSql(sBulider.ToString()) > ;
}
④单表Select
public List<T> SerarchList<T>(string where = "") where T : new()
{
var tableName = new T().GetType().Name;
var sqlString = new StringBuilder();
sqlString.AppendFormat("select * from [{0}]", tableName);
if (!string.IsNullOrEmpty(where))
{
sqlString.AppendFormat(" where '{0}'", where);
}
var list = new List<T>();
using (var dataReader = SqlDBHelper.ExecuteReader(sqlString.ToString()))
{
while (dataReader.Read())
{
var t = new T();
var properties = t.GetType().GetProperties();
foreach (var p in properties)
{
p.SetValue(t, dataReader[p.Name], null);
}
list.Add(t);
}
}
return list;
}
三、局限性
①实体类名字必须和表名一致
②主键名必须为Id
③不适合自增型主键
④出现问题难以调试(可以添加日志跟踪)
⑤安全性低(暴漏字段名)
⑥实现分页太暴力
⑦灵活性低(通用和灵活永远的矛盾体)
⑧Update操作时会全表更新
⑨Select操作会全字段查询
四、源码下载
SQLSERVER单表CRUD通用方法的更多相关文章
- 2单表CRUD综合样例开发教程
东软集团股份有限公司 基础软件事业部 单表CRUD综合样例开发教程 东软机密 tui 更改履历 版本号 更改时间 更改的 图表和章节号 状态 更改简要描述 更改申 请编号 更改人 批准人 V1.0 2 ...
- Django单表查询及其方法
单表查询 前期准备 首先新建一个test的python文件,然后再manage.py中导入main语句及其下面的复制到新文件中 并导入django 写上django.setup() 就可以导入对应的m ...
- 数据库调优过程(二):找到IO不存在问题,而是sqlserver单表写入IO瓶颈
物理机上测试IO是否为瓶颈: 使用一个死循环insert into测试数据库最大写入速度: use [iTest]; declare @index int; ; begin ; INSERT into ...
- [mysql]清除单表大量数据方法(需保留部分数据)
大半夜的在删除线上的日志数据,需要清理的大概有1亿八千万条...任务艰巨. 毕业前没学过数据库,所以对于如何清理大量数据还真一时不知道该怎么办才好.刚开始确实想过对表进行重命名的方式来处理,不过当时因 ...
- 一步步学Mybatis-实现单表情况下的CRUD操作 (3)
今天这一章要紧接上一讲中的东西,本章中创建基于单表操作的CRUD与GetList操作,此示例中以Visitor表为范例,为了创建一点测试数据我们先弄个Add方法吧 继续在上次的IVisitorOper ...
- SpringBoot系列——Spring-Data-JPA(究极进化版) 自动生成单表基础增、删、改、查接口
前言 我们在之前的实现了springboot与data-jpa的增.删.改.查简单使用(请戳:SpringBoot系列——Spring-Data-JPA),并实现了升级版(请戳:SpringBoot系 ...
- Innodb单表数据物理恢复
本文将介绍使用物理备份恢复Innodb单表数据的方法 前言: 随着innodb的普及,innobackup也成为了主流备份方式.物理备份对于新建slave,全库恢复的需求都能从容应对. 但当面临单表数 ...
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...
- 创建展开行明细编辑表单的 CRUD 应用
http://www.runoob.com/jeasyui/jeasyui-app-crud3.html jQuery EasyUI 应用 - 创建展开行明细编辑表单的 CRUD 应用 当切换数据网格 ...
随机推荐
- 《连载 | 物联网框架ServerSuperIO教程》- 3.设备驱动介绍
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- redis开启远程访问
redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf 打开redis.conf文件在NETWORK部分有说明 ######################### ...
- Struts2框架深入详解版
一.认识Struts2 1. 什么是Web框架? 1.1 模型1 1.2 模型2 和MVC 1.3 Web框架的诞生 2. Struts1 到Struts2 2.1 其他 Web框架 2.2 ...
- 对于System.exit(0)和System.exit(1)的一般理解
public static void exit(int status) 终止当前正在运行的 Java 虚拟机.参数用作状态码:根据惯例,非 0 的状态码表示异常终止. 该方法调用 Runtime 类中 ...
- jQuery获取短信验证码+倒计时实现
jQuery 短信验证码倒计时 <script type="text/javascript" charset="utf-8"> $(function ...
- python语言中的编码问题(续)
上文提到了python开发中非常重要的两处设置. 一个是编解码器的默认设置defaultencoding >>> import sys >>> sys.getdef ...
- 如何解决MSI类型的Sharepoint Server2016 安装即点即用的office 2016 plus问题
前提 在sharepoint server 2016安装office 2016 plus提示如下错误: 解决方法 Ø 概念 1. 即点和即用的概念:即点即用是一种通过 Internet 安装和更新 O ...
- HTML学习(二)进阶篇
在博客园中有许多大神对HTML超文本标记语言写了很多内容,总结了很多知识,这里对我看到的博客文章, 所学到的知识,做一个总结. 一)列表和表格 dl→definition list(定义列表),见备 ...
- 【搬砖】安卓入门(2)- Java开发编程基础--进制转换和运算符
02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 ...
- Xamarin Android Activity全屏的两种方式
方式一 直接在Activity的Attribute中定义 如下 在 MainActivity 中 [Activity(Label = "app", MainLauncher = t ...