DataReader读取返回list

public ActionResult Index()
        {
            string ConStr = ConfigurationManager.AppSettings["constr"];
            string sql = "select * from UserInfo";

SqlConnection conn = new SqlConnection(ConStr);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sql;
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            // IList<UserInfo> list = ToList<UserInfo>(reader);
            IList<UserInfo> list = new List<UserInfo>();
            //获取UserInfo的类型
            Type type = typeof(UserInfo);
            if (type.IsValueType || type == typeof(string))
            {
                //如果是值类型
                while (reader.Read())
                {
                    UserInfo local = (UserInfo)Convert.ChangeType(reader[0], type, null);
                    list.Add(local);
                }
            }
            else
            {
                //获取UserInfo的公共属性
                PropertyInfo[] properties = type.GetProperties();
                string name = string.Empty;
                while (reader.Read())
                {
                    //创建UserInfo实例
                    UserInfo local = Activator.CreateInstance<UserInfo>();
                    //如果reader的列名和属性名相等,则把它的值赋给该属性
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        name = reader.GetName(i);
                        foreach (PropertyInfo info in properties)
                        {
                            if (name.Equals(info.Name))
                            {
                                info.SetValue(local, Convert.ChangeType(reader[info
                                    .Name], info.PropertyType), null);
                                break;
                            }
                        }
                    }
                    //添加到list集合
                    list.Add(local);
                }
            }
            conn.Close();
            return View(list);
        }

private IList<T> ToList<T>(SqlDataReader reader)
        {
            Type type = typeof(T);
            IList<T> list = null;
            if (type.IsValueType || type == typeof(string))
                list = CreateValue<T>(reader, type);
            else
                list = CreateObject<T>(reader, type);
            reader.Dispose();
            reader.Close();
            return list;
        }

private IList<T> CreateObject<T>(SqlDataReader reader, Type type)
        {
            IList<T> list = new List<T>();
            PropertyInfo[] properties = type.GetProperties();
            string name = string.Empty;
            while (reader.Read())
            {
                T local = Activator.CreateInstance<T>();
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    name = reader.GetName(i);
                    foreach (PropertyInfo info in properties)
                    {
                        if (name.Equals(info.Name)) { info.SetValue(local, Convert.ChangeType(reader[info.Name], info.PropertyType), null); break; }
                    }
                }
                list.Add(local);
            }
            return list;
        }

private IList<T> CreateValue<T>(SqlDataReader reader, Type type)
        {
            IList<T> list = new List<T>();
            while (reader.Read())
            {
                T local = (T)Convert.ChangeType(reader[0], type, null);
                list.Add(local);
            }
            return list;
        }

}

时间: 2024-08-03 06:21:34

DataReader读取返回list的相关文章

使用DataReader读取数据

List<User> allUsers = new List<User>(); SqlConnection conn = new SqlConnection(连接字符串); SqlCommand cmd = new SqlCommand("SELECT语句",conn); conn.Open(); using(SqlDataReader rdr = cmd.ExecuteReader()){ while(rdr.Read()) { User u = new Us

ADO.NET——Command(执行SQL) &amp; DataReader(读取数据库)

一,关于两个对象的基础知识 1,Command Command对象主要用于对数据源执行SQL命令并返回结果. ADO.NET提供了Connection来连接数据库,同时也提供了Command对象来查询数据库.同Connection对象一样,Command也有两种:OleDbCommand和SqlCommand.其区别同Connection对象. Command对象有一个属性:CommandType(sql语句或者存储过程):三个重要方法:ExecuteNonQuery(增.删.改影响的行数).E

webservice篇:其中关于调用外界数据,读取返回数据

1,通过Android中已存取的数据,返回数据(json格式,object类型数据:strJson) 2,业务需求:通过webservice调用外界暴露的数据并将返回来的json数据序列化,读取存入数据库表:[SQ_Event] TODO: 1,讲解webservice小程序应用 2,json序列化 1,讲解webservice小程序应用 using HMFW.BLL.BaseInfo; using HMFW.BLL.SQJS.ZJWG; using HMFW.BLL.UserRoleManag

Python_Example_文件路径读取返回_文件目录选择文件_实现程序

2018-09-14 Author: 楚格 IDE: Pycharm2018.02   Python 3.7 KeyWord : 文件路径 文件名称选择 Explain:  Testing_Config_List 思路: 1. def Function_Select_File():  获取当前路径(调试中默认路径) 2. 遍历 当前文件夹下的所有文件和文件夹 以供选择使用 3. 拼接字符串 返回有用的路径 4.着重处理了 文件选择部分  方法还可以继续优化 5. code 一步步搭建,注释部分是

ajax读取返回的json格式的数据

** //alert(msg);//{"serverHost":"23","mail":"32","mailPassword":"23"} //json = eval(json); //alert("===json:id=" + json.id + ",uname=" + json.uname + ",email=" + jso

C# winform窗体设计-通过条件查询数据

在winform 数据库设计中,有时候需要通过条件查询对应的数据,并且将数据显示在文本框(or 富文本框)中,下面,小编将讲述通过一个条件: 首先,我们需要对数据库建立连接,并且执行数据库命令,在此之前,我们先创建一个winform窗体,窗体设计大概如下所示:    在创建窗体后,我们应该进行书写代码阶段: 1 string s = "server=SAM_PC;database=MInformationDB;Integrated Security=true"; 2 SqlConnec

echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端

1.echarts的官网上的demo,都是直接写死的随机数据,没有和数据库的交互,所以就自己写了一下,ok,我们开始一步一步走一遍整个流程吧. 就以官网最简单的那个小demo来做修改吧.官网上的小demo的效果图如下:(很熟悉,有没有) 2.按照echarts的使用方法新建一个echarts.html文件.为ECharts准备一个具备大小(宽高)的Dom(讲的有点细,熟悉的朋友直接跳过) <!DOCTYPE html> <head> <meta charset="u

C# 之 DataReader 和 DataSet 的区别

1. 获取数据的方式[1]DataReader 为在线操作数据, DataReader会一直占用SqlConnection连接,在其获得数据过程中其它操作不可以再使用SqlConnection连接对象. 代码如下: while(datareader.read()) { .............. } dataview.datasource=datareader; dataview.databind(); [2]DataSet为离线操作数据,DataSet会将数据一次性读入内存,然后断开连接,这

DataReader方式 获取数据的操作

一.使用DataReader读取为对象List /// <summary> /// 获得数据列表List<>,DataReader 使用参数的 /// </summary> /// <param name="strWhere">条件</param> /// <param name="ht">HashTable,保存参数名及参数对应的值</param> /// <returns&