SQLDataReaderToList 数据读取器转换到List

来源:互联网 发布:数据库用来做什么 编辑:程序博客网 时间:2024/05/22 00:34

现在开发项目都用到3层架构,bll dal model 大量使用list来返回列表数据,
每次都需要手动写一堆代码把每行数据写到List中。

public class UserInfo{   public string Age   {       get;       set;   }    public string Sex    {       get;       set;    }}
```List<UserInfo> UserInfoList= new List<UserInfo>while(reader.Read()){      UserInfo userinfo = new UserInfo();      userinfo.Age = reader["Age"].ToString();      userinfo.Sex= reader["Sex"].ToString();      UserInfoList.add(userinfo);}GridView1.DataSource = UserInfoList;GridView1.DataBind()
这样写字段太多的话工作量太大了,有没有一种自动转到列的方法呢代码可以也样写的
protected List<T> DataReaderToList<T>(SqlDataReader SDR) where T : class    {        List<T> ListData = new List<T>();        if (SDR.HasRows)        {            ListData.Clear();            while (SDR.Read())            {                object Obj = System.Activator.CreateInstance(typeof(T));                Type ObjType = Obj.GetType();                #region 一行数据赋值给一个对象                for (int i = 0; i < SDR.FieldCount; i++)                {                    PropertyInfo PI = ObjType.GetProperty(SDR.GetName(i));                    if (PI != null)                    {                        string PTName = PI.PropertyType.Name.ToString();                        string FullName = PI.PropertyType.FullName;                        string Name = PI.Name;                        object Value = PI.GetValue(Obj, null);                        switch (PI.PropertyType.ToString())                        {                            case "System.Int64":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt64(SDR[Name]), null);                                break;                            case "System.Byte[]":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : (byte[])SDR[Name], null);                                break;                            case "System.Boolean":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToBoolean(SDR[Name]), null);                                break;                            case "System.String":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToString(SDR[Name]), null);                                break;                            case "System.DateTime":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDateTime(SDR[Name]), null);                                break;                            case "System.Decimal":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDecimal(SDR[Name]), null);                                break;                            case "System.Double":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDouble(SDR[Name]), null);                                break;                            case "System.Int32":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt32(SDR[Name]), null);                                break;                            case "System.Single":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSingle(SDR[Name]), null);                                break;                            case "System.Byte":                                PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToByte(SDR[Name]), null);                                break;                            default:                                int Chindex = PTName.IndexOf("Nullable");                                if (FullName.IndexOf("System.Int64") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt64(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.Boolean") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToBoolean(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.String") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToString(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.DateTime") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDateTime(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.Decimal") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDecimal(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.Double") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDouble(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.Int32") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt32(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.Single") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSingle(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.Byte") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToByte(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.Int16") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt16(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.UInt16") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt16(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.UInt32") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt32(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.UInt64") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt64(SDR[Name]), null);                                }                                if (FullName.IndexOf("System.SByte") >= 0)                                {                                    PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSByte(SDR[Name]), null);                                }                                break;                        }                    }                }                #endregion                ListData.Add(Obj as T);            }        }        if (!SDR.IsClosed)            SDR.Close();        return ListData;    }

var UserInfoList = DataReaderToList(reader);
GridView1.DataSource = UserInfoList;
GridView1.DataBind();
“`

一句话就搞定了。

0 0
原创粉丝点击