您现在的位置是:首页 >

ado中文什么意思 ado.net快速上手实践篇(二)

火烧 2022-04-26 05:44:03 1056
ado. et快速上手实践篇(二) 五 dal层数据访问实现 在这里我们使用前一篇文章里实现的数据持久化层和伪SqlMa er对象 实现数据操作 下面我们来看看Dal下核心的Dao如何实现 还记得我们

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    }    }

ado中文什么意思 ado.net快速上手实践篇(二)
初始化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)    可以看出 工程里的文件结构还是很清晰的 需要学习的童鞋不妨下载使用试试看吧 lishixinzhi/Article/program/net/201311/11765  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码