使用Spring.net中对Ado.net的抽象封装来访问数据库
使用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
namespace AdoNetAccess { public class AdoDaoBase:AdoDaoSupport { private string cmdText = @"select Address, City, CompanyName, ContactName, " + "ContactTitle, Country, Fax, CustomerID, Phone, PostalCode, " + "Region from Customers "; public DataTable GetCustomer() { return AdoTemplate.DataTableCreate(CommandType.Text, cmdText); } } }
2.app.config要添加如下的配置:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="common"> <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/> </sectionGroup> <sectionGroup name="spring"> <section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core"/> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/> </sectionGroup> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <common> <logging> <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net"> <arg key="configType" value="INLINE"/> </factoryAdapter> </logging> </common> <log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file type="log4net.Util.PatternString" value="Logs\%date{yyyMMdd}.log"/> <appendToFile value="true"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %-5level - %message%newline"/> </layout> </appender> <root> <level value="INFO"/> <appender-ref ref="FileAppender"/> </root> <logger name="Spring"> <level value="WARN"/> </logger> <logger name="Clubank"> <level value="DEBUG"/> </logger> </log4net> <spring> <parsers> <parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data"/> </parsers> <context> <resource uri="config://spring/objects"/> </context> <objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database" xmlns:tx="http://www.springframework.net/tx"> <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"/> <object id="adoTemplate" type="Spring.Data.Core.AdoTemplate, Spring.Data"> <property name="DbProvider" ref="dbProvider"/> </object> <!-- 查询定义 --> <object id="AdoDaoBase" type="AdoNetAccess.AdoDaoBase, AdoNetAccess"> <!-- 注入 AdoTemplate --> <property name="AdoTemplate" ref="adoTemplate"/> </object> </objects> </spring> </configuration>
3.测试访问数据库,Program.cs中的代码:
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AdoNetAccess { class Program { static void Main(string[] args) { Spring.Context.IApplicationContext context = Spring.Context.Support.ContextRegistry.GetContext(); Spring.Data.Common.IDbProvider provider = context.GetObject("dbProvider") as Spring.Data.Common.IDbProvider; Spring.Data.Core.AdoTemplate adoTemplate = context.GetObject("adoTemplate") as Spring.Data.Core.AdoTemplate; object result = adoTemplate.ExecuteScalar(System.Data.CommandType.Text, "select count(*) from Customers"); AdoDaoBase dao = context.GetObject("AdoDaoBase") as AdoDaoBase; DataTable dt = dao.GetCustomer(); Console.WriteLine(); } } }
上面是一个简单的示例,参考了很多的文章,有:
- http://www.cnblogs.com/haogj/archive/2011/06/13/2079928.html
- http://www.cnblogs.com/haogj/archive/2011/06/18/2084065.html
- http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_blogs.html
- http://www.cnblogs.com/heartstill/archive/2011/08/25/2153832.html
- http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_Index.html
- http://www.cnblogs.com/MyNameEPC/archive/2009/05/09/1453409.html
谢谢以上博客的博主。
代码下载: SpringNET.rar