• 利用反射将Datatable、SqlDataReader转换成List模型


    public class DataTableToList<T>whereT :new()
    
    {
    
    ///<summary>
    
    ///利用反射将Datatable转换成List模型
    
    ///</summary>
    
    ///<param name="dt"></param>
    
    ///<returns></returns>
    
    public static List<T> ConvertToList(DataTabledt)
    
    {
    
    List<T> list =newList<T>();
    
    Typetype =typeof(T);
    
    stringtempName =string.Empty;
    
    foreach(DataRowdrindt.Rows)
    
    {
    
    T t =newT();
    
    PropertyInfo[] propertys =
    t.GetType().GetProperties();
    
    foreach(PropertyInfopiinpropertys)
    
    {
    
    tempName = pi.Name;
    
    if(dt.Columns.Contains(tempName))
    
    {
    
    if(!pi.CanWrite)
    
    {
    
    continue;
    
    }
    
    var value = dr[tempName];
    
    if(value !=DBNull.Value)
    
    {
    
    pi.SetValue(t, value,null);
    
    }
    
    }
    
    }
    
    list.Add(t);
    
    }
    
    returnlist;
    
    }
    
    }

    2. SqlDataReader转IList

    /// <summary>
            /// 判断SqlDataReader是否存在某列
            /// </summary>
            /// <param name="dr">SqlDataReader</param>
            /// <param name="columnName">列名</param>
            /// <returns></returns>
            private bool readerExists(SqlDataReader dr, string columnName)
            {
    
                dr.GetSchemaTable().DefaultView.RowFilter = "ColumnName= '" + columnName + "'";
    
                return (dr.GetSchemaTable().DefaultView.Count > 0);
    
            }
    
            ///<summary>
            ///利用反射和泛型将SqlDataReader转换成List模型
            ///</summary>
            ///<param name="sql">查询sql语句</param>
            ///<returns></returns>
    
            public IList<T> ExecuteToList<T>(string sql) where T : new()
    
            {
                IList<T> list;
    
                Type type = typeof (T);
    
                string tempName = string.Empty;
    
                using (SqlDataReader reader = ExecuteReader(sql))
                {
                    if (reader.HasRows)
                    {
                        list = new List<T>();
                        while (reader.Read())
                        {
                            T t = new T();
    
                            PropertyInfo[] propertys = t.GetType().GetProperties();
    
                            foreach (PropertyInfo pi in propertys)
                            {
                                tempName = pi.Name;
    
                                if (readerExists(reader, tempName))
                                {
                                    if (!pi.CanWrite)
                                    {
                                        continue;
                                    }
                                    var value = reader[tempName];
    
                                    if (value != DBNull.Value)
                                    {
                                        pi.SetValue(t, value, null);
                                    }
    
                                }
    
                            }
    
                            list.Add(t);
    
                        }
                        return list;
                    }
                }
                return null;
            }

    3、结果集从存储过程获取

    /// <summary>
            /// 处理存储过程
            /// </summary>
            /// <param name="spName">存储过程名</param>
            /// <param name="parameters">参数数组</param>
            /// <returns>sql数据流</returns>
            protected virtual SqlDataReader ExecuteReaderSP(string spName, ArrayList parameters)
            {
                SqlDataReader result = null;
                cmd.CommandText = spName;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Clear();
                if (parameters != null)
                {
                    foreach (SqlParameter param in parameters)
                    {
                        cmd.Parameters.Add(param);
                    }
                }
                try
                {
                    Open();
                    result = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception e)
                {
                    if (result != null && (!result.IsClosed))
                    {
                        result.Close();
                    }
                    LogHelper.WriteLog("
    方法异常【ExecuteReaderSP(string spName, ArrayList parameters)】" + spName, e);
                    throw new Exception(e.Message);
                }
                return result;
            }
    <strong>      </strong> ///<summary>
            ///利用反射将SqlDataReader转换成List模型
            ///</summary>
            ///<param name="spName">存储过程名称</param>
            ///<returns></returns>
    
            public IList<T> ExecuteQueryListSP<T>(string spName, params SqlParameter[] listParams) where T : new()
            {
                IList<T> list;
    
                Type type = typeof(T);
    
                string tempName = string.Empty;
    
                using (SqlDataReader reader = ExecuteReaderSP(spName, new ArrayList(listParams)))
                {
                    if (reader.HasRows)
                    {
                        list = new List<T>();
                        while (reader.Read())
                        {
                            T t = new T();
    
                            PropertyInfo[] propertys = t.GetType().GetProperties();
    
                            foreach (PropertyInfo pi in propertys)
                            {
                                tempName = pi.Name;
    
                                //for (int intField = 0; intField < reader.FieldCount; intField++)
                                //{//遍历该列名是否存在
                                //}
    
                                if (readerExists(reader, tempName))
                                {
                                    if (!pi.CanWrite)
                                    {
                                        continue;
                                    }
                                    var value = reader[tempName];
    
                                    if (value != DBNull.Value)
                                    {
                                        pi.SetValue(t, value, null);
                                    }
    
                                }
    
                            }
    
                            list.Add(t);
    
                        }
                        return list;
                    }
                }
                return null;
            }
  • 相关阅读:
    Dev中出现Error 0: 操作成功完成。
    找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有没有鞍点。
    oracle 日常删除多余数据
    java程序练习:输入数字转换成中文输出(金额相关)
    linux压缩和解压文件命令
    一篇文章搞定Git——Git代码管理及使用规范
    读书心得(1)-20191108
    回表查询的说明
    Java 8新特性解读
    java-try catch中return在finally之前 还是之后执行
  • 原文地址:https://www.cnblogs.com/superfeeling/p/13644052.html
Copyright © 2020-2023  润新知