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 应用 当切换数据网格 ...
随机推荐
- Docker的ubuntu镜像安装的容器无ifconfig和ping命令的解决
Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令 解决: apt-get update apt install net-tools # ifconfig apt ...
- 解决 Tomcat Server in Eclipse unable to start within 45 seconds 不能启动的问题
1.在 Eclipse 下方 Servers TAB页,双击 "Tomcat 7.0 at localhost": 2.在右上角处点开 Timeouts 的设定,修改Start( ...
- 【JS基础】算法
Math 对象 Math.sqrt() //返回一个数的平方根
- android环境下的即时通讯
首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送 ...
- Android事件分发机制浅谈(三)--源码分析(View篇)
写事件分发源码分析的时候很纠结,网上的许多博文都是先分析的View,后分析ViewGroup.因为我一开始理解的时候是按我的流程图往下走的,感觉方向很对,单是具体分析的时候总是磕磕绊绊的,老要跳到Vi ...
- 【代码笔记】iOS-UILable电子表显示
一,效果图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...
- 遇到的Exception/error及解决办法记录汇总
一.java.net.SocketException 1.java.net.SocketException:Connection reset 首先,如果一端的Socket被关闭(或主动关闭,或因为异常 ...
- Oracle索引梳理系列(十)- 直方图使用技巧及analyze table操作对直方图统计的影响(谨慎使用)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- SQL Server 自动化运维系列
本系列为SQL SERVER自动化运维的一些操作技巧点,所有内容都是根据日常运维过程中最经常遇到的问题,并为此形成了一些自动化运维的方式,皆为原创.... 供部分DBA和开发人员浏览借鉴,所应用平台基 ...
- 自定义制作iso镜像
下载"/etc/yum.repos.d/"下的MondoRescue软件库,文件名为"mondorescue.repo".请为你的Linux OS发行版本下载正 ...