免费邮箱 |加入收藏 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > .NET专区 > ASP.NET应用

ado.net快速上手实践篇(一)

时间:2011-05-21 10:43:51  来源:站内  作者:潘春会

        #endregion
    }
}

到这里,我们实现了SqlServer类里的方法,对Ms SqlServer数据库我们就已经可以进行简单的基础的CRUD操作了。

三、简单直观的对象实体转换
在第二步中,我们已经实现了简单的数据CRUD操作。根据楼猪使用ORM的经验和习惯,我们也应该对一些查询结果进行转换,因为以类的组织方式比直接呈现ado.net对象更容易让人接受,效率高低反在其次。下面利用常见的反射原理,简单实现一个对象实体转换器ModelConverter类:


代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Reflection;
using System.Threading;

namespace AdoNetDataAccess.Core.Obj2Model
{
    using AdoNetDataAccess.Core.Contract;

    public sealed class ModelConverter
    {
        private static readonly object objSync = new object();

        #region query for list

        /// <summary>
        /// 查询数据表项并转换为对应实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objType"></param>
        /// <param name="rdr"></param>
        /// <returns></returns>
        public static IList<T> QueryForList<T>(string sqlStr, CommandType cmdType, List<DbParameter> listParams, Type objType, IDbOperation dbOperation)
            where T : class, new()
        {
            IDataReader rdr = dbOperation.ExecuteReader(sqlStr, cmdType, listParams);
            IList<T> listModels = new List<T>();
            try
            {
                Monitor.Enter(objSync);
                Hashtable ht = CreateHashColumnName(rdr);
                while (rdr.Read())
                {
                    Object obj = Activator.CreateInstance(objType);
                    PropertyInfo[] properties = objType.GetProperties();
                    foreach (PropertyInfo propInfo in properties)
                    {
                        string columnName = propInfo.Name.ToUpper();
                        if (ht.ContainsKey(columnName) == false)
                        {
                            continue;
                        }
                        int index = rdr.GetOrdinal(propInfo.Name);
                        object columnValue = rdr.GetValue(index);
                        if (columnValue != System.DBNull.Value)

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
如何找出DHCP地址池里未使用的IP地址
如何找出DHCP地址池里
国内常用的DNS列表
国内常用的DNS列表
Linux邮件服务器软件比较
Linux邮件服务器软件比
学用纯CSS打造可折叠树状菜单
学用纯CSS打造可折叠树
相关文章
栏目更新
栏目热门