C#教程之自己动手写映射第四节[封装删除]
一、动机
我们在借助于SqlHelper删除数据的时候,一般的代码如下:
1 /* 2 * 3 * 创建人:李林峰 4 * 5 * 时 间:2012-07-26 6 * 7 * 描 述:借助于SqlHelper删除表的数据 8 * 9 */ 10 11 using System.Data; 12 using CSharp.Core; 13 14 namespace CSharp.Remove 15 { 16 class Common 17 { 18 public void RemoveInvoke() 19 { 20 string conn = "Data Source=192.168.1.8;Initial Catalog=Test;uid=sa;pwd=123!@#abc;"; 21 22 //根据编号删除表A数据 23 string strSQLA = string.Format("DELETE FROM A WHERE ID = {0}", 1); 24 SqlHelper.ExecuteNonQuery(conn, CommandType.Text, strSQLA); 25 26 //根据编号删除表B数据 27 string strSQLB = string.Format("DELETE FROM B WHERE ID = {0}", 1); 28 SqlHelper.ExecuteNonQuery(conn, CommandType.Text, strSQLB); 29 30 //根据编号删除表C数据 31 string strSQLC = string.Format("DELETE FROM C WHERE ID = {0}", 1); 32 SqlHelper.ExecuteNonQuery(conn, CommandType.Text, strSQLC); 33 34 //根据编号删除表D数据 35 string strSQLD = string.Format("DELETE FROM D WHERE ID = {0}", 1); 36 SqlHelper.ExecuteNonQuery(conn, CommandType.Text, strSQLD); 37 38 //根据编号删除表E、F、G、H.........数据 39 } 40 } 41 }
如上所示:我们在进行表数据根据编号删除的时候,重复不停的写着:
1 //根据编号删除表A数据 2 string strSQLA = string.Format("DELETE FROM A WHERE ID = {0}", 1); 3 SqlHelper.ExecuteNonQuery(conn, CommandType.Text, strSQLA);
在我们反复书写的同时,有没能停下脚步思考下这些代码是否有重复的地方或是可以重用的地方呢?经过思考我们可以看出变化的部分只是SQL语句不同:
1 DELETE FROM A WHERE ID = {0}
我们再进一步思考SQL中变化的部分与不变的部分:
1 DELETE FROM 变化的表名称 WHERE 变化的主键 = 变化的主键编号
到了这里,我们基本分离出了所有删除语句中变化的部分和变化的部分。
二、实现
通过上面的动机,我们可以在SqlHelper的基础上二次封装如下方法,以简化我们开发过程中的工作:
1 /// <summary> 2 /// 封装后 3 /// </summary> 4 public void RemoveInvokeByHelper() 5 { 6 //根据编号删除表A数据 7 RemoveHelper.Main(conn, "A", "ID", "1"); 8 //根据编号删除表B数据 9 RemoveHelper.Main(conn, "B", "ID", "1"); 10 //根据编号删除表C数据 11 RemoveHelper.Main(conn, "C", "ID", "1"); 12 //根据编号删除表D数据 13 RemoveHelper.Main(conn, "D", "ID", "1"); 14 //根据编号删除表E、F、G、H.........数据 15 }
简单应用代码如下:
1 /* 2 * 3 * 创建人:李林峰 4 * 5 * 时 间:2012-07-26 6 * 7 * 描 述:借助于SqlHelper删除表的数据 8 * 9 */ 10 11 using System; 12 using System.Collections.Generic; 13 using System.Data; 14 using System.Text; 15 16 namespace CSharp.Core 17 { 18 public class RemoveHelper 19 { 20 public static void Main(string conn, string tableName, string primaryKey, string keyValue) 21 { 22 string strRemoveSQL = string.Format("DELETE FROM {0} WHERE {1} = {2}", tableName, primaryKey, keyValue); 23 SqlHelper.ExecuteNonQuery(conn, CommandType.Text, strRemoveSQL); 24 } 25 } 26 } 27 28 29 /* 30 * 31 * 创建人:李林峰 32 * 33 * 时 间:2012-07-26 34 * 35 * 描 述:常量类 36 * 37 */ 38 39 using System.Configuration; 40 41 namespace CSharp.DLL 42 { 43 /// <summary> 44 /// 常量类 45 /// </summary> 46 public class Constant 47 { 48 /// <summary> 49 /// 连接字符串 50 /// </summary> 51 public static string CONNSTRING = ConfigurationManager.ConnectionStrings["Conn"].ToString(); 52 } 53 } 54 55 56 57 58 /* 59 * 60 * 创建人:李林峰 61 * 62 * 时 间:2012-07-26 63 * 64 * 描 述:删除员工实例 65 * 66 */ 67 68 using System; 69 using CSharp.Core; 70 71 namespace CSharp.DLL 72 { 73 public class Employee 74 { 75 public static readonly string tableName = "Employee"; 76 public static readonly string primaryKey = "EmployeeID"; 77 /// <summary> 78 /// 删除员工 79 /// </summary> 80 /// <param name="keyValue"></param> 81 public static void Remove(string keyValue) 82 { 83 RemoveHelper.Main(Constant.CONNSTRING, tableName, primaryKey, keyValue); 84 } 85 } 86 } 87 88 89 90 /* 91 * 92 * 创建人:李林峰 93 * 94 * 时 间:2012-07-26 95 * 96 * 描 述:删除消息实例 97 * 98 */ 99 100 using System; 101 using CSharp.Core; 102 103 namespace CSharp.DLL 104 { 105 class Message 106 { 107 public static readonly string tableName = "Message"; 108 public static readonly string primaryKey = "MessageID"; 109 /// <summary> 110 /// 删除消息 111 /// </summary> 112 /// <param name="keyValue"></param> 113 public static void Remove(string keyValue) 114 { 115 RemoveHelper.Main(Constant.CONNSTRING, tableName, primaryKey, keyValue); 116 } 117 } 118 }
项目结构如下:
三、总结
通过上面的例子一步一步对我们日常的重复代码进行了封装,直到我们认为变化的地方是一个不可分割的点,删除时我们暂时并没有用到“映射”的概念,大家可以继续想一下,是不是我们的“tableName”,“MessageID”等可以统计归类到.xml文件中,我们的底层去依赖个xml,使程序的结构变的更清晰,后面的章节我们会继续介绍。
四、版权
转载请注明出处:http://www.cnblogs.com/iamlilinfeng
C#教程之自己动手写映射第四节[封装删除]相关推荐
- 自己动手写ORM框架
自己动手写ORM框架(九):实现删除功能Remove方法 奋斗 2010-07-03 19:29 阅读:1962 评论:6 自己动手写ORM框架(八):实现修改功能Update方法 奋斗 2010 ...
- SSO单点登录教程(四)自己动手写SSO单点登录服务端和客户端
作者:蓝雄威,叩丁狼教育高级讲师.原创文章,转载请注明出处. 一.前言 我们自己动手写单点登录的服务端目的是为了加深对单点登录的理解.如果你们公司想实现单点登录/单点注销功能,推荐使用开源的单点登录框 ...
- java笔记:自己动手写javaEE
写这篇博客前,我有个技术难题想请教大家,不知道谁有很好的建议,做过互联网的童鞋应该都知道,有点规模的大公司都会做用户行为分析系统,而且有些大公司还会提供专业的用户行为分析解决方案例如:百度分析,goo ...
- 【自己动手写神经网络】小白入门连载(二)--机器人时代必须得有人工神经(不是神经病)...
2019独角兽企业重金招聘Python工程师标准>>> [自己动手写神经网络]小白入门连载(一) 在上一章中,我们已经介绍了神经网络的基本概念.思想,并提及了有关人工神经元模型的部分 ...
- 还是觉得应该动手写点东西....
哎,说来惭愧来博客园已经一年多了,博客里面的文档近95%都不是自己写的.都是在网上找到直接看过一遍之后,就复制粘贴发表了.一年多来一直都是这样,似乎没有觉得有什么不对的地方. 直到最近我真正的思索下面 ...
- 【Spark大数据处理】动手写WordCount
本文转自http://mp.weixin.qq.com/s?__biz=MzA5MTcxOTk5Mg==&mid=207906066&idx=1&sn=f9cc48a55343 ...
- 自己动手写Docker系列 -- 6.3 手动配置容器网络(下)
简介 网络部分较为复杂,本篇先利用之前写好的基础容器和网桥部分,加上手工给容器配置网络,让其容器与外部网络部分功能正常,为后面程序编写打下基础 源码说明 同时放到了Gitee和Github上,都可进行 ...
- 【无标题】自己动手写Docker系列 -- 6.3 手动配置容器网络(上)
简介 网络部分较为复杂,本篇先利用之前写好的基础容器和网桥部分,加上手工给容器配置网络,让其容器与宿主机网络部分功能正常,为后面程序编写打下基础 源码说明 同时放到了Gitee和Github上,都可进 ...
- 自己动手写PHP MVC框架
自己动手写PHP MVC框架 来自:yuansir-web.com / yuansir@live.cn 代码下载: https://github.com/yuansir/tiny-php-framew ...
最新文章
- 腾讯员工吐槽:团队来了个阿里高p,瞬间会议变多,群多了
- Conficker-AE的处理方法
- JAVA中System.out.println和System.out.print有什么区别
- java记录log信息
- Ubuntu安装Google浏览器
- 按时间取天和月的数据,和字符串截取函数
- 每天一点点之vue框架开发 - vue坑-input 的checked渲染问题
- 微信公众平台开发(一) 配置接口
- java面试题学生表成绩表老师表_SQL经典学生老师成绩表面试题
- Elasticsearch常用搜索和分词器
- 使用poi解析word转html,并处理word中图片
- Linux iproute2 命令家族(ip / ss)
- Hashtable(哈希表)
- 北京交通大学计算机学院复试名单2021,北京交通大学2021年硕士研究生复试公告...
- 对接钉钉API语音功能相关文档
- CF373C-Counting Kangaroos is Fun
- CSS(Cascading Style Sheets)
- Elasticsearch Nested类型
- 3月最新HP库存备件信息-广州励康
- 安全沙箱技术赋能企业转型,提效200%!