一、适用场景

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

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

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

  ④当你的业务只涉及单表

二、代码展示

  ①单表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. 通过Java代码实现对数据库的数据进行操作:增删改查

    在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao  xingming    xue ...

  2. ORACLE实现自定义序列号生成

    实际工作中,难免会遇到序列号生成问题,下面就是一个简单的序列号生成函数 (1)创建自定义序列号配置表如下: --自定义序列 create table S_AUTOCODE ( pk1 ) primar ...

  3. 计算(LnN!)的值

    import java.util.*;import java.math.*;public class CaculatorLnN { public static void main(String[] a ...

  4. solr添加多个core

    在D:\solr\solr_web\solrhome文件夹下: 1)创建core0文件夹 2)复制D:\solr\solr_web\solrhome\configsets\basic_configs/ ...

  5. PHP flush()与ob_flush()的区别

    buffer ---- flush()buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页.主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区 ...

  6. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  7. 微信小程序注册

    小程序是一种新的开放能力,可以在微信内被便捷地获取和传播,同时具有出色的使用体验.开发者可以根据平台提供的能力,快速地开发一个小程序. 开放内容包括: 1.开放注册范围:企业.政府.媒体.其他组织: ...

  8. Android View的滑动 动画

    [scrollTo/scrollBy] //控件内的文字会移动,但是控件本身不会移动,而且移动到控件之外之后,文字也就看不见了 if(v.equals(button2)){ button2.scrol ...

  9. [Modern OpenGL系列(三)]用OpenGL绘制一个三角形

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51347008 在上一篇文章中已经介绍了OpenGL窗口的创建.本文接着说如 ...

  10. WPF 自定义CheckBox样式

    自定义CheckBox样式,mark一下,方便以后参考复用 设计介绍: 1.一般CheckBox模板太难看了,肯定要重写其中的模板 2.模板状态为未选中状态和选中状态,设置为默认未选中就好了. 默认状 ...