打造自己的数据访问层一

项目开发中,大多数开发人员的核心工作就是如何对数据进行存储及访问。为了进行数据操作,我们首先得解决几个基本问题:

1、如何与一个数据库建立连接。

2、如何从数据库读取相应的数据。

3、如何对数据表进行增改操作。

.NET中,ADO.NET很方便的解决了上面三个问题,我们可以使用DbConnection进行连接,DataSet进行数据存储,DataAdapter进行数据更新。先看一段代码:

  1. //创建DbConnection对象连接数据库
  2. SqlConnection conn = new SqlConnection();
  3. conn.ConnectionString = "server=.;uid=sa;password=123456; database=DATA_BASE; max pool size=300;";
  4. //创建DataAdapter、Command对象,读取数据
  5. SqlDataAdapter da = new SqlDataAdapter();
  6. SqlCommand cmd = new SqlCommand();
  7. cmd.Connection = conn;
  8. cmd.CommandText = "SELECT * FROM TEST";
  9. da.SelectCommand = cmd;
  10. //创建DataSet对象,存储数据,建立与物理表的映射
  11. DataSet ds = new DataSet();
  12. da.Fill(ds, "TEST"); 

上述代码实现对数据库“DATA_BASE”中“TEST”表数据读取,并用DataSet时行存储。

既然读出了TEST表中的数据,接下来要解决的就是如何对TEST表进行增、删、改操作。

为实现增、删、改操作,需要为DataAdapter指定InsertCommand、DeleteCommand以及UpdateCommand,并为每个Command对象绑定参数:

  1. //新增数据  
  2. cmd = new SqlCommand();  
  3. cmd.Connection = conn;  
  4. cmd.CommandText = "INSERT INTO TEST (ID, NAME, VAL) VALUES (@ID, @NAME, @VAL)";  
  5. SqlParameter param = new SqlParameter("@ID"null);  
  6. param.SourceColumn = "ID";  
  7. cmd.Parameters.Add(param);  
  8. param = new SqlParameter("@NAME"null);  
  9. param.SourceColumn = "NAME";  
  10. cmd.Parameters.Add(param);  
  11. param = new SqlParameter("@VAL"null);  
  12. param.SourceColumn = "VAL";  
  13. cmd.Parameters.Add(param);  
  14. da.InsertCommand = cmd;  
  15.  
  16. //修改数据  
  17. cmd = new SqlCommand();  
  18. cmd.Connection = conn;  
  19. cmd.CommandText = "UPDATE TEST SET NAME = @NAME, VAL = @VAL WHERE ID = @ID";  
  20. param = new SqlParameter("@ID"null);  
  21. param.SourceColumn = "ID";  
  22. cmd.Parameters.Add(param);  
  23. param = new SqlParameter("@NAME"null);  
  24. param.SourceColumn = "NAME";  
  25. cmd.Parameters.Add(param);  
  26. param = new SqlParameter("@VAL"null);  
  27. param.SourceColumn = "VAL";  
  28. cmd.Parameters.Add(param);  
  29. da.UpdateCommand = cmd;  
  30.  
  31. //删除数据  
  32. cmd = new SqlCommand();  
  33. cmd.Connection = conn;cmd.CommandText = "DELETE FROM TEST WHERE ID = @ID";  
  34. param = new SqlParameter("@ID"null);  
  35. param.SourceColumn = "ID";  
  36. cmd.Parameters.Add(param);  
  37. da.DeleteCommand = cmd;  

完成准备工作后,利用DataTable进行数据操作:

  1. DataTable dt = ds.Tables["TEST"];  
  2. dt.PrimaryKey = new DataColumn[] { dt.Columns["ID"] };  
  3. dt.Rows.Add(new object[]{  
  4.     Guid.NewGuid().ToString(), string.Format("测试:{0}", DateTime.Now), string.Format("测试值:{0}", DateTime.Now)  
  5. });  
  6. DataRow dr = dt.Rows.Find("f8dc2c64-f51a-4e99-bde1-a20069b09c3a");  
  7. if (dr != null){  
  8.     dr["NAME"] = string.Format("测试修改:{0}", DateTime.Now);  
  9. }  
  10. dr = dt.Rows.Find("ed7d079b-81ec-4ba4-bf85-688621e495e7");  
  11. if (dr != null){      
  12. dr.Delete();  

***调用DataAdapter的Update方法保存变更后的数据:

da.Update(ds, “TEST”);

利用ADO.NET的上述方法,我们已经完成了对数据库的完整操作。

注:上述代码是利用DataAdapter对数据库进行读写的基本原理,非常重要,我们后面的改造都将以此作为依据。

虽然我们已经能完成对数据的操作,但现实际上还是存在很多问题:

1、我们只是对MSSql数据库进行操作,如果要对Oracle或MySql进行操作我们得定义新的Oracle或MySql数据对象,如果能由系统自动判断操作的数据库类型,我们就能省去对数据对象的关注。

2、我们做了太多的准备工作,我们只对一张表进行操作,如查我们要对多张表进行操作,参数又很多,实际上会产生大量的重复代码,我们得考虑消除这些代码。

对于上述问题,如果我们自己实现一个数据访问层,对ADO.NET对象进行封装,只关注实际的数据的操作,而不关注系统是如何与数据库进行连接、如何进行参数传递,那我们的需求就算基本满足了。

我们可以先进行假设,需要达成如下效果,以伪码的形式给出:

  1. 创建数据执行者:DataExecuter:execObj;    
  2. 创建数据映射对象:DataMapping map;    
  3. 由映射对象填充数据集:map.Fill(sqlText, "TEST", ds);    
  4. 设置映射对象更新命令:map.SetCommands(Insert | Update | Delete, ds);    
  5. DataTable进行实际增、删、改操作。    
  6. 数据执行者执行***的变更操作:execObj.Update(ds);    

 

后面我将一步步看到上述假设是如何实现的。

原文链接:http://www.cnblogs.com/FlySoul/archive/2011/05/02/2034368.html

【编辑推荐】

  1. 晒晒我的通用数据访问层
  2. 几步走,教你创建简单访问数据库方法
  3. 一句代码实现批量数据绑定 下
  4. 一步一步设计你的数据库1
  5. 不重复随机数列生成算法

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/266971.html<

(0)
运维的头像运维
上一篇2025-05-06 05:07
下一篇 2025-05-06 05:09

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注