使用Spring.net中对Ado.net的抽象封装来访问数据库

     Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。

要采用spring.net的数据访问抽象来访问sql server数据库,首先要引用spring.net的相应程序集spring.core,spring.data,common.Logging等,从 AdoDaoSupport 派生一个用于数据访问的类,然后项目的配置文件app.config中要添加相应的配置,然后就可以访问数据库了。

1.从 AdoDaoSupport 派生一个用于数据访问的类AdoDaoBase.cs

  1. namespace AdoNetAccess
  2. {
  3. public class AdoDaoBase:AdoDaoSupport
  4. {
  5. private string cmdText = @"select Address, City, CompanyName, ContactName, " +
  6. "ContactTitle, Country, Fax, CustomerID, Phone, PostalCode, " +
  7. "Region from Customers ";
  8.  
  9. public DataTable GetCustomer()
  10. {
  11. return AdoTemplate.DataTableCreate(CommandType.Text, cmdText);
  12. }
  13.  
  14. }
  15. }

2.app.config要添加如下的配置:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <configSections>
  4. <sectionGroup name="common">
  5. <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
  6. </sectionGroup>
  7. <sectionGroup name="spring">
  8. <section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core"/>
  9. <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
  10. <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
  11. </sectionGroup>
  12. <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  13. </configSections>
  14. <common>
  15. <logging>
  16. <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
  17. <arg key="configType" value="INLINE"/>
  18. </factoryAdapter>
  19. </logging>
  20. </common>
  21. <log4net>
  22. <appender name="FileAppender" type="log4net.Appender.FileAppender">
  23. <file type="log4net.Util.PatternString" value="Logs\%date{yyyMMdd}.log"/>
  24. <appendToFile value="true"/>
  25. <layout type="log4net.Layout.PatternLayout">
  26. <conversionPattern value="%date %-5level - %message%newline"/>
  27. </layout>
  28. </appender>
  29. <root>
  30. <level value="INFO"/>
  31. <appender-ref ref="FileAppender"/>
  32. </root>
  33. <logger name="Spring">
  34. <level value="WARN"/>
  35. </logger>
  36. <logger name="Clubank">
  37. <level value="DEBUG"/>
  38. </logger>
  39. </log4net>
  40.  
  41. <spring>
  42. <parsers>
  43. <parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data"/>
  44. </parsers>
  45.  
  46. <context>
  47. <resource uri="config://spring/objects"/>
  48. </context>
  49.  
  50. <objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database" xmlns:tx="http://www.springframework.net/tx">
  51. <db:provider id="dbProvider" provider="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS2005;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=1234;Trusted_Connection=False"/>
  52.  
  53. <object id="adoTemplate" type="Spring.Data.Core.AdoTemplate, Spring.Data">
  54. <property name="DbProvider" ref="dbProvider"/>
  55. </object>
  56.  
  57. <!-- 查询定义 -->
  58. <object id="AdoDaoBase" type="AdoNetAccess.AdoDaoBase, AdoNetAccess">
  59. <!-- 注入 AdoTemplate -->
  60. <property name="AdoTemplate" ref="adoTemplate"/>
  61. </object>
  62. </objects>
  63.  
  64. </spring>
  65.  
  66. </configuration>

3.测试访问数据库,Program.cs中的代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace AdoNetAccess
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. Spring.Context.IApplicationContext context = Spring.Context.Support.ContextRegistry.GetContext();
  15. Spring.Data.Common.IDbProvider provider = context.GetObject("dbProvider") as Spring.Data.Common.IDbProvider;
  16. Spring.Data.Core.AdoTemplate adoTemplate = context.GetObject("adoTemplate") as Spring.Data.Core.AdoTemplate;
  17. object result = adoTemplate.ExecuteScalar(System.Data.CommandType.Text, "select count(*) from Customers");
  18.  
  19. AdoDaoBase dao = context.GetObject("AdoDaoBase") as AdoDaoBase;
  20. DataTable dt = dao.GetCustomer();
  21.  
  22. Console.WriteLine();
  23.  
  24. }
  25. }
  26. }

上面是一个简单的示例,参考了很多的文章,有:

  1. http://www.cnblogs.com/haogj/archive/2011/06/13/2079928.html
  2. http://www.cnblogs.com/haogj/archive/2011/06/18/2084065.html
  3. http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_blogs.html
  4. http://www.cnblogs.com/heartstill/archive/2011/08/25/2153832.html
  5. http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_Index.html
  6. http://www.cnblogs.com/MyNameEPC/archive/2009/05/09/1453409.html

谢谢以上博客的博主。

代码下载: SpringNET.rar

使用Spring.net中对Ado.net的抽象封装来访问数据库的更多相关文章

  1. Spring.NET 中的 ADO.NET 数据访问的示例

    Spring.NET 1.3.1 中提供了一个使用 AdoTemplate 的完整示例,包括使用泛型和使用非泛型技术进行数据访问,这个示例位于下载的压缩包中\Spring.NET-1.3.1\Spri ...

  2. 在Golang中如何正确地使用database/sql包访问数据库

    本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结. 其实我也是一个新手,机缘巧合 ...

  3. Spring Boot中使用时序数据库InfluxDB

    除了最常用的关系数据库和缓存之外,之前我们已经介绍了在Spring Boot中如何配置和使用MongoDB.LDAP这些存储的案例.接下来,我们继续介绍另一种特殊的数据库:时序数据库InfluxDB在 ...

  4. Spring.NET中事务管理【转】

    http://www.cnblogs.com/GoodHelper/archive/2009/11/16/springnet_transaction.html 浏览了下写的比较清楚. 在.NET FC ...

  5. spring boot(三):Spring Boot中Redis的使用

    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...

  6. Spring Boot中的事务管理

    原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...

  7. Spring mvc中@RequestMapping 6个基本用法

    Spring mvc中@RequestMapping 6个基本用法 spring mvc中的@RequestMapping的用法.  1)最基本的,方法级别上应用,例如: Java代码 @Reques ...

  8. 如何动态在spring mvc中增加bean

    阅读对象 搭框架人员,或者其他感兴趣的开发人员 背景 一般来说在业务代码中,加上 @Component, @Service,@Repository, @Controller等注解就可以实现将bean注 ...

  9. Spring Boot中的注解

    文章来源:http://www.tuicool.com/articles/bQnMra 在Spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了 ...

随机推荐

  1. Objective-C之@class的使用

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(二)ActionSheet视图 学习笔记

    action动作 sheet表 其实就是一种菜单 参数:1代理:谁去代理它2取消按钮标题3这个按钮标题会自动变成红色4添加设置其他按钮(不想加,设置为nil)   然后我们为这些按钮添加点击事件:   ...

  3. LeetCode 1 Two Sum(二分法)

    题目来源:https://leetcode.com/problems/two-sum/ Given an array of integers, find two numbers such that t ...

  4. 快捷下载 sourceForge下的资源

    一些开源项目通常会放在  sourceforge.net下面发布.然而,这个网站有时候出现卡顿,并且需要点击几次页面才能下载到自己想要的资源. 这里有个好办法,一步列出所有可下载的资源:        ...

  5. 这些git技能够你用一年了

    用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流. git设置关闭自动换行 git config ...

  6. 测试管理_出色测试管理者的思考[持续更新ing]

    如何合理安排并按质按量按时完成每一个测试任务,做好项目管理? 如何把控到每一个测试任务的质量? 如何快速构建和构建好测试环境? 如何获取或快速制作测试数据? 如何确保每一个测试人员的工作都饱满? 如何 ...

  7. python操作db2和mysql ,ibm_db

    我需要提取mysql和db2的数据进行对比,所以需要用python对其都进行操作. python对mysql进行操作应该没什么问题,就是安装drive后就可以了,在上一篇中有讲安装python-mys ...

  8. 《HeadFirst设计模式》读后感——对学习设计模式的一些想法

    最近看完了<HeadFirst设计模式>,GOF的<设计模式——可复用面向对象软件的基础>的创建型模式也读完了,经历了从一无所知到茅塞顿开再到充满迷惑的过程. 不得不说< ...

  9. 设计模式C#实现(六)——单例模式

    单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 构成: 1.私有的构造函数 2.私有静态的实例 3.返回实例的静态方法 public class Singleton { privat ...

  10. HTML5 datalist 标签

    以前需要用JS写一个自动完成组件(Suggest),很费劲.HTML5时代则不用了,直接使用datalist标签,直接减少了工作量.如下 <!DOCTYPE html> <html& ...