一、适用场景

  ①当你书写简单的增删改查心累了

  ②当你的项目不考虑并发、高性能

  ③当你追求更快速的开发效率

  ④当你的业务只涉及单表

二、代码展示

  ①单表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操作会全字段查询

四、源码下载

  sourcecode

SQLSERVER单表CRUD通用方法的更多相关文章

  1. 2单表CRUD综合样例开发教程

    东软集团股份有限公司 基础软件事业部 单表CRUD综合样例开发教程 东软机密 tui 更改履历 版本号 更改时间 更改的 图表和章节号 状态 更改简要描述 更改申 请编号 更改人 批准人 V1.0 2 ...

  2. Django单表查询及其方法

    单表查询 前期准备 首先新建一个test的python文件,然后再manage.py中导入main语句及其下面的复制到新文件中 并导入django 写上django.setup() 就可以导入对应的m ...

  3. 数据库调优过程(二):找到IO不存在问题,而是sqlserver单表写入IO瓶颈

    物理机上测试IO是否为瓶颈: 使用一个死循环insert into测试数据库最大写入速度: use [iTest]; declare @index int; ; begin ; INSERT into ...

  4. [mysql]清除单表大量数据方法(需保留部分数据)

    大半夜的在删除线上的日志数据,需要清理的大概有1亿八千万条...任务艰巨. 毕业前没学过数据库,所以对于如何清理大量数据还真一时不知道该怎么办才好.刚开始确实想过对表进行重命名的方式来处理,不过当时因 ...

  5. 一步步学Mybatis-实现单表情况下的CRUD操作 (3)

    今天这一章要紧接上一讲中的东西,本章中创建基于单表操作的CRUD与GetList操作,此示例中以Visitor表为范例,为了创建一点测试数据我们先弄个Add方法吧 继续在上次的IVisitorOper ...

  6. SpringBoot系列——Spring-Data-JPA(究极进化版) 自动生成单表基础增、删、改、查接口

    前言 我们在之前的实现了springboot与data-jpa的增.删.改.查简单使用(请戳:SpringBoot系列——Spring-Data-JPA),并实现了升级版(请戳:SpringBoot系 ...

  7. Innodb单表数据物理恢复

    本文将介绍使用物理备份恢复Innodb单表数据的方法 前言: 随着innodb的普及,innobackup也成为了主流备份方式.物理备份对于新建slave,全库恢复的需求都能从容应对. 但当面临单表数 ...

  8. 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】

    一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...

  9. 创建展开行明细编辑表单的 CRUD 应用

    http://www.runoob.com/jeasyui/jeasyui-app-crud3.html jQuery EasyUI 应用 - 创建展开行明细编辑表单的 CRUD 应用 当切换数据网格 ...

随机推荐

  1. spring源码:学习线索(li)

    一.spring xml配置(不包括AOP,主要了解在初始化及实例化过程中spring配置文件中每项内容的具体实现过程,从根本上掌握spring) <bean>的名字 &,alia ...

  2. win10 下visual studio 2015 在调试模式下不能跟踪源文件

    win10 下visual studio 2015 在调试模式下不能跟踪源文件,只要一调试就会关闭(隐藏)打开的文档,非常不方便.经过一番折腾,发现是配置的问题. 如果安装多个版本的VS,请删除对应版 ...

  3. HTML学习(一)基础篇

    这篇文章有人比我总结的好,适用于新手,我就适当的铺垫一下,结尾处会给你们网站,我就不班门弄斧了. 一)HTML结构 1.<head>标签 <title> <base/&g ...

  4. iOS 学习 - 2.据网址显示源码

    输入网址,解出源码,显示label 我这里是在第二个界面显示的,用的属性传值. A界面先从 storyboard 拖个 textfield 和一个 button .m里面button的方法 //按钮点 ...

  5. apache-shiro入门<一>

    Apache Shiro是一个强大而灵活的开源安全框架(本来想传到网盘供大家下载,但是鉴于国内网盘动不动就要关闭清楚用户数据:所以我提供了另一个shiro的中文文档下载链接:http://downlo ...

  6. jsTree简单应用Demo

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  7. SQL优化技术分析-2:SQL书写的影响

    1.同一功能同一性能不同写法SQL的影响. 如一个SQL在A程序员写的为 Select * from zl_yhjbqk B程序员写的为 Select * from dlyx.zl_yhjbqk(带表 ...

  8. Oracle的SQL基础

    1.了解SQL的种类 (1)DDL 数据定义语言:定义数据库中数据要如何存储的,包括对数据库对象的创建(create)修改(alter)删除(drop)的操作,这些对象主要有数据库,数据表,视图,索引 ...

  9. 烂泥:切割nginx日志

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 这几天自己看了下博客的nginx日志,发现日志文件发现越来越大. 因为nginx自己不会 ...

  10. qt中ui的 使用介绍

    1.什么是ui?ui通常是用Qt 设计师设计出来的界面文件的后缀.通常情况下ui是一个指向这个界面类的指针.ui-> 一般就是用来访问这个界面类里面的控件.例如你的ui文件里有一个叫okButt ...