DataReader数据绑定

using System;
using System.Data;
using System.Reflection;
using System.Data.Common;
using System.Data.SqlClient;
using System.Collections.Generic;

namespace DataReaderList
{
    public partial class ReaderList
    {
        ///
        /// 读取实体列表
        ///
        ///要读取的实体
        ///数据源
        ///成功(实体列表)/失败(Null)
        public static IList ReadEntityListByReader(DbDataReader reader) where T : new()
        {
            IList ilist = null;
            try
            {
                ilist = new List();
                using (reader)
                {
                    while (reader.Read())
                    {
                        T model = new T();
                        foreach (var item in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
                        {
                            var obj = new object();
                            try
                            {
                                obj = reader[item.Name];
                            }
                            catch (Exception ex)
                            {
                                continue;
                            }
                            if (obj == DBNull.Value || obj == null)
                                continue;
                            var value = item.GetSetMethod();
                            if (value == null)
                                continue;
                            item.SetValue(model, obj, null);
                        }
                        ilist.Add(model);
                        model = default(T);
                    }
                }
                return ilist;
            }
            finally
            {
                ilist = null;
            }
            
        }
        ///
        ///  读取实体
        ///
        ///要读取的实体
        ///数据源
        ///成功(实体列表)/失败(Null)
        public static T ReadEntityByReader(DbDataReader reader) where T : new()
        {
            T model = default(T);
            try
            {
                using (reader)
                {
                    if (reader.Read())
                    {
                        model = new T();
                        foreach (var item in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
                        {
                            var obj = new object();
                            try
                            {
                                obj = reader[item.Name];
                            }
                            catch (Exception ex)
                            {
                                continue;
                            }
                            if (obj == DBNull.Value || obj == null)
                                continue;
                            var value = item.GetSetMethod();
                            if (value == null)
                                continue;
                            item.SetValue(model, obj, null);
                        }
                    }
                }
                return model;
            }
            finally
            {
                model = default(T);
            }
        }
        ///
        /// 读取实体列表
        ///
        ///要读取的实体
        ///执行数据语句
        ///语句参数
        ///成功(实体列表)/失败(Null)
        public static IList ReadEntityList(string cmdText, DbParameter[] parameters) where T : new()
        {
            using (SqlConnection conn = new SqlConnection(""))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    PrepareCommand(cmd, conn, cmdText, parameters);
                    SqlDataReader sdr = cmd.ExecuteReader();
                    return ReadEntityListByReader(sdr);
                }
            }
        }
        ///
        /// 执行语句参数设置
        ///
        ///执行数据命令
        ///数据连接
        ///执行数据语句
        ///语句参数
        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, string cmdText, DbParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            cmd.CommandType = CommandType.Text;//cmdType;
            if (cmdParms != null)
            {
                foreach (SqlParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }
    }
}
posted @ 2015-01-08 14:36  liyx0618  阅读(289)  评论(0编辑  收藏  举报