在网上查了一下,发现有些人写的效率不高.自己修改了一下.
根据select出来的字段去反射.
public static T ReaderToModel<T>(IDataReader dr)
{
try
{
using (dr)
{
if (dr.Read())
{
Type modelType = typeof(T);
T model = Activator.CreateInstance<T>();
for (int i = 0; i < dr.FieldCount; i++)
{
PropertyInfo pi = modelType.GetProperty(GetPropertyName(dr.GetName(i)));
pi.SetValue(model, HackType(dr[i], pi.PropertyType), null);
}
return model;
}
}
return default(T);
}
catch (Exception ex)
{
throw ex;
}
}
public static List<T> ReaderToList<T>(IDataReader dr)
{
using (dr)
{
List<T> list = new List<T>();
Type modelType = typeof(T);
while (dr.Read())
{
T model = Activator.CreateInstance<T>();
for (int i = 0; i < dr.FieldCount; i++)
{
PropertyInfo pi = modelType.GetProperty(GetPropertyName(dr.GetName(i)));
pi.SetValue(model, HackType(dr[i], pi.PropertyType), null);
}
list.Add(model);
}
return list;
}
}
//这个类对可空类型进行判断转换,要不然会报错
private static object HackType(object value, Type conversionType)
{
if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
return null;
System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType);
conversionType = nullableConverter.UnderlyingType;
}
return Convert.ChangeType(value, conversionType);
}
private static bool IsNullOrDBNull(object obj)
{
return ((obj is DBNull) || string.IsNullOrEmpty(obj.ToString())) ? true : false;
}
//取得DB的列对应bean的属性名
private static string GetPropertyName(string column)
{
column = column.ToLower();
string[] narr = column.Split('_');
column = "";
for (int i = 0; i < narr.Length; i++)
{
if (narr[i].Length > 1)
{
column += narr[i].Substring(0, 1).ToUpper() + narr[i].Substring(1);
}
else
{
column += narr[i].Substring(0, 1).ToUpper();
}
}
return column;
}
分享到:
相关推荐
DataReader反射泛型实体对象。数据库已有。完整的例子。
高效的处理DataReader转化为实体对象。 支持发杂对象,如: Class A { public int x; public B y; } Class B { public int z; }
SqlDataReader形成的是数据流,并且数据流是以只进且只读的形式。我们可以形容它向一股瀑布一样,只往前进。
C#使用ExecuteReader返回DataReader既有查询结果集又有输出参数和返回值的使用注意事项
把DataReader转换成DataTable的方法 把DataReader转换成DataTable的方法
C#的Json操作类,支持数组,DataTable,DataReader等转Json
DataReader实体自动映射
C#下的各种helper类的集合,放在一个可执行的vs项目里,具体有string,ftp,file,excel,md5,datatable,datareader,xml,enum等等
C# FireBird 工具类 封装对FireBird数据库的所有操作,例如建立连接,返回DataSet,返回DataReader等
03.DataReader的辅助类 MyDataReaderHelper.cs 04.DataTable操作辅助类 MyDataTableHelper.cs 05.DateTime的辅助类 MyDateTimeHelper.cs 06.常用的目录操作辅助类 MyDirHelper.cs 07.枚举操作辅助类 MyEnumHelper ...
C#SQL数据库操作通用类,运行SQL语句。 运行SQL语句返回DataReader,SqlDataReader对象;生成Command对象;返回adapter对象;运行SQL语句,返回DataSet对象;返回SQL语句执行结果的第一行第一列;返回SQL语句第一列,...
在.NET中的DataReader简介 关于DataReader的使用简介,从其他地方转载的。
包括最基本的方法: 打开数据库 关闭数据库 创建SqlCommand命令方法 执行SQL语句方法 将DataReader对象转换成DataTable对象方法
if (row != null) { obj = Activator.CreateInstance(); foreach (DataColumn column in row.Table.Columns) { PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName); ... object value = row...
Mime实体帮助类 MimeHeaders mime的Header帮助类 MimeReader mime读取帮助类 QuotedPrintableEncoding mimeEncoding帮助类 9.PDF 转化类 PDFOperation PDFOperation--C#PDF文件操作帮助类 类主要功能有1....
操作类中包含: 1. 过滤特殊字符 2. 格式化字符型、日期型、布尔型 3. List转换成Json 4. 对象转换为Json 5. 对象集合转换Json 6. 普通集合转换Json 7. DataSet转换为Json 8. Datatable转换为Json 9. DataReader转换...
如何将任何数据读取器转换为通用列表。
总结了一些DataReader和DataSet一些特征和用法上的区别
C#基础类库 1.Chart图形 Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;&Cache;缓存帮助类 CacheHelper C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等...
提示:用DataReader去访问数据库,将得到的结果通过反射生成实体对象/集合返回; 4 封装一个方法,能控制台输出任意实体的全部属性和属性值; 5 进阶需求:提供泛型的数据库实体插入、实体更新、ID删除数据的数据库...