知识大全 ado.net快速上手实践篇(二)
Posted 知
篇首语:蹉跎莫遣韶光老,人生唯有读书好。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ado.net快速上手实践篇(二)相关的知识,希望对你有一定的参考价值。
五 dal层数据访问实现 在这里我们使用前一篇文章里实现的数据持久化层和伪SqlMapper对象 实现数据操作 下面我们来看看Dal下核心的Dao如何实现 还记得我们在下面的dao类是怎么实现的吗?没错 我们根据一个基类BaseDAO和它的构造函数 实现dao的配置加载 但是楼猪的实现没有那么复杂和强大 本文的实现其实就是通过BaseDAO和构造函数获取数据库连接对象的key 初始化一个SqlMapper 然后利用SqlMapper对象进行基本的CRUD等等数据操作 那么我们如何利用BaseDAO和构造函数就像以前在系列文章里的提到的Dal层下那样进行SqlMapper的初始化呢? 在AdoNetDataaccess Mapper下我们定义公共的BaseDAO类 代码 namespace AdoNetDataAccess Mapper public abstract class BaseDAO #region PRoperties public SqlMapper SqlMapper get; set; #endregion #region Constructor private BaseDAO() /// <summary> /// SqlMapper属性适用 /// </summary> /// <param name= mapperName ></param> public BaseDAO(string mapperName) this SqlMapper = MapperUtill GetMapper(mapperName); #endregion 初始化SqlMapper的实用类 代码 using System; using System Collections Generic; using System Configuration; namespace AdoNetDataAccess Mapper using AdoNetDataAccess Core Contract; using AdoNetDataAccess Core Implement; public sealed class MapperUtill #region fields public static string currentSqlKey = sqlConn ; public static int cmdTimeOut = ; private static readonly object objSync = new object(); private static readonly IDictionary<string SqlMapper> dictMappers = new Dictionary<string SqlMapper>(); #endregion #region constructor and methods private MapperUtill() static MapperUtill() try cmdTimeOut = int Parse(ConfigurationManager AppSettings[ db_timeOut ]); catch cmdTimeOut = ; //实例化SqlDbMapper for (int i = ; i < ConfigurationManager ConnectionStrings Count; i++) string key = ConfigurationManager ConnectionStrings[i] Name; string value = ConfigurationManager ConnectionStrings[i] ConnectionString; CreateMapper(key value cmdTimeOut); public static SqlMapper GetSqlMapper(string key) return MapperUtill GetMapper(key); public static SqlMapper GetCurrentSqlMapper() return MapperUtill GetMapper(currentSqlKey); public static void CreateMapper(string connKey string sqlConStr int connTimeOut) IDbOperation operation = new SqlServer(sqlConStr connTimeOut); SqlMapper mapper = new SqlMapper(operation); dictMappers Add(connKey ToUpper() Trim() mapper);//不区分大小写 public static SqlMapper GetMapper(string sqlConKey) if (string IsNullOrEmpty(sqlConKey)) throw new Exception( 数据库连接字符串主键为空! ); sqlConKey = sqlConKey ToUpper();//不区分大小写 SqlMapper mapper = null; if (dictMappers ContainsKey(sqlConKey)) mapper = dictMappers[sqlConKey]; else throw new Exception(string Format( 没有 所对应的数据库连接 sqlConKey)); return mapper; /// <summary> /// 释放所有 /// </summary> public void Release() foreach (KeyValuePair<string SqlMapper> kv in dictMappers) SqlMapper mapper = kv Value; if (mapper == null) continue; mapper CurrentDbOperation CloseConnection(); dictMappers Clear(); #endregion 这个实用类的重要作用就是初始化配置文件里connectionStrings配置节点 以获取sql连接对象必须的连接字符串 PersonDao类 下面就是针对具体的Person表的数据操作了 代码 using System Collections Generic; using System Data; namespace AdoNetDataAccess Dal Dao using AdoNetDataAccess Dal Model; using AdoNetDataAccess Dal Utility; using AdoNetDataAccess Mapper; public class PersonDao : BaseDAO public PersonDao() : base( sqlConn )//sqlConn是<connectionStrings>配置节点的一个name public int Insert(string sqlInsert) int id = this SqlMapper Insert(sqlInsert); //object obj = this SqlMapper ExecuteScalar(sqlInsert System Data CommandType Text null); return id; public bool BatchInsert(IList<Person> listModels) int batchSize = ; int copyTimeOut = ; DataTable dt = DataTableHelper CreateTable<Person>(listModels); bool flag = this SqlMapper BatchInsert(typeof(Person) Name batchSize copyTimeOut dt); return flag; public int Update(string sqlUpdate) int result = this SqlMapper Update(sqlUpdate); return result; public IList<Person> SelectPersons(string sqlSelect) IList<Person> listPersons = this SqlMapper QueryForList<Person>(sqlSelect); return listPersons; public IDictionary<int Person> SelectDictPersons(string sqlSelect) IDictionary<int Person> dictPersons = this SqlMapper QueryForDictionary<int Person>( Id sqlSelect); return dictPersons; public DataTable SelectPersonTable(string sqlSelect) DataTable dt = this SqlMapper FillDataTable(sqlSelect CommandType Text null); return dt; public DataSet SelectPersonDataSet(string sqlSelect) DataSet ds = this SqlMapper FillDataSet(sqlSelect CommandType Text null); return ds; public int Delete(string sqlDelete) int result = this SqlMapper Delete(sqlDelete); return result; 到这里 一个dao类操作就实现了 然后我们按步就班实现对外调用的服务接口 在表现层调用吧 六 表现层的调用 配置文件 代码 <appSettings> <add key= db_timeOut value= /> </appSettings> <connectionStrings> <add name= sqlConn connectionString= Data Source= \\sqlexpress; Initial Catalog=TestDb; User Id=sa; PassWord= ; /> <add name= sqlConnStr connectionString= Data Source= \\sqlexpress; Initial Catalog=TestDb; User Id=sa; Password= ; /> <add name= sqlConnStr connectionString= Data Source= \\sqlexpress; Initial Catalog=TestDb; User Id=sa; Password= ; /> </connectionStrings> 其中 connectionString是必须的 如果没有 我们无法加载调用可用的SqlMapper CRUD操作测试 代码 using System; using System Collections; using System Collections Generic; using System Data; namespace OOXXWebApp using AdoNetDataAccess Dal; using AdoNetDataAccess Dal Model; public partial class _Default : System Web UI Page protected void Page_Load(object sender EventArgs e) if (!IsPostBack) //增删改查测试 string sqlInsert = INSERT Person (FirstName LastName Weight Height) VALUES( jeff wong ) SELECT @@IDENTITY FROM Person(NOLOCK) ; string sqlUpdate = UPDATE Person SET Height= WHERE Id= ; string sqlSelect = SELECT TOP * FROM Person(NOLOCK) ; string sqlDelete = DELETE Person WHERE Id> AND Id< ; IList<Person> listModels = new List<Person>(); for (int i = ; i < ; i++) Person model = new Person(); model FirstName = Jeff ; model LastName = Wong ; model Weight = ; model Height = ; listModels Add(model); Response Write( Test Beginning <br/> ); int id = ServiceFactory CreatePersonService() Add(sqlInsert); Response Write(string Format( <br/>Insert and return id: id)); bool flag = ServiceFactory CreatePersonService() BatchInsert(listModels); Response Write(string Format( <br/> Batch Insert flag ? succeed : failed )); IList<Person> listPersons = ServiceFactory CreatePersonService() GetPersons(sqlSelect); Response Write(string Format( <br/>Select pesons and return persons: listPersons Count)); IDictionary<int Person> dictPersons = ServiceFactory CreatePersonService() GetDictPersons(sqlSelect); Response Write(string Format( <br/>Select pesons and return dictionary persons: dictPersons Count)); DataTable dt = ServiceFactory CreatePersonService() GetPersonTable(sqlSelect); Response Write(string Format( <br/>Select pesons and return persons: dt Rows Count)); DataSet ds = ServiceFactory CreatePersonService() GetPersonDataSet(sqlSelect); Response Write(string Format( <br/>Select pesons and return persons: ds Tables[ ] Rows Count)); int affectNum = ServiceFactory CreatePersonService() Modify(sqlUpdate); Response Write(string Format( <br/>Update and affect rows : affectNum)); affectNum = ; affectNum = ServiceFactory CreatePersonService() Remove(sqlDelete); Response Write(string Format( <br/>Delete and affect rows : affectNum)); Response Write( <br/><br/>Test End ); 这个就不用多说了吧 表现层写SQL语句调用写好的服务就行了 比较不舒服的地方就是SQL语句不得不写在类里面 如果自动生成或者独立放在xml下实现可配置的形式那就更好了 当然sql语句不是我们讨论的重点 您有好的方法可以自己扩展实现更人性化的功能 减少书写SQLl语句的工作 七 最后 对demo工程文件结构进行简单说明 数据持久化层AdoNetDataAccess Core SqlMapper层AdoNetDataAccess Mapper(引用AdoNetDataAccess Core) 具体数据操作使用层AdoNetDataAccess Dal(引用AdoNetDataAccess Mapper) 表现层AdoNetDataAccessWebApp(引用AdoNetDataAccess Dal) 可以看出 工程里的文件结构还是很清晰的 需要学习的童鞋不妨下载使用试试看吧 cha138/Article/program/net/201311/11765相关参考
ADO.NET的最佳实践技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介 本文为您提供
最佳实践ADO.NET实用经验无保留曝光 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
手把手教你ADO.NET快速起步 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ADONET是微
知识大全 Apache Commons DbUtils 快速上手
ApacheCommonsDbUtils快速上手 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Hi
Eclipse快速上手指南之使用JUnit 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 
Ajax+PHP快速上手及简单应用说明 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!对于Ajax最
Eclipse快速上手指南之使用ANT 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ant是J
Eclipse3.0快速上手指南之安装配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ecl
ADO.NET和ADO的比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
处理ADO与ADO.NET对比介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ADONET统