CSFramework.DB.DbTools类下载|C/S开发框架

数据转换工具,DbDataReader/DataRow转实体对象
C# 全选
using System;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Reflection;
namespace CSFramework.DB
{
/// <summary>
/// 数据转换工具,DbDataReader/DataRow转实体对象
/// </summary>
public static class DbTools
{
private static void SetValue(object obj, PropertyInfo p, string fname, object fvalue, Type fType)
{
object tv;
//处理byte数组转日期,如SqlServer的Timestamp类型
//数据类型是byte[],且对象属性类型是DateTime
if (p.PropertyType == typeof(DateTime) && fType == typeof(byte[]))
{
long lo = Math.Abs(BitConverter.ToInt64((byte[])fvalue, 0));
DateTime rt = DateTime.FromBinary(lo);
p.SetValue(obj, rt, null);
}
//数组类型,单独处理
else if (p.PropertyType.IsArray)
{
if (fvalue == DBNull.Value) //特殊处理DBNull类型
p.SetValue(obj, null, null);
else
p.SetValue(obj, fvalue, null);
}
//bool类型,特殊处理
else if (p.PropertyType == typeof(Boolean))
{
string[] bTrue = "YES,Y,T,1,TRUE".Split(',');
string[] bFalse = "NO,N,F,0,FALSE".Split(',');
var o = bTrue.Where(e => e.ToUpper() == fvalue.ToString().Trim().ToUpper()).FirstOrDefault();
if (!String.IsNullOrEmpty(o))
p.SetValue(obj, true, null);
else
p.SetValue(obj, false, null);
}
//处理对象数据类型
else if (p.PropertyType == typeof(System.Object))
{
p.SetValue(obj, fvalue, null);
}
else
{
//普通数据类型,赋值操作
if (fvalue == null || String.IsNullOrWhiteSpace(fvalue.ToString()))//空值
tv = p.PropertyType.IsValueType ? Activator.CreateInstance(p.PropertyType) : null;//值类型
else
tv = System.ComponentModel.TypeDescriptor.GetConverter(p.PropertyType).ConvertFromString(fvalue.ToString());//创建对象
p.SetValue(obj, tv, null);
}
}
/// <summary>
/// DbDataReader转换为对象实例,(字段名称优先)
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="row">DbDataReader实例</param>
/// <returns></returns>
public static T Convert2Object<T>(DbDataReader row) where T : new()
{
T obj = new T();
Type type = typeof(T);
string fname; object fvalue; Type fType;
//循环记录的字段名称
for (int i = 0; i < row.FieldCount; i++)
{
fname = row.GetName(i);//字段名
fvalue = row.GetValue(i);//字段的值
fType = row.GetFieldType(i);//字段的数据类型
//根据字段名称获取对象的属性
PropertyInfo p = type.GetProperty(fname, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (p != null) SetValue(obj, p, fname, fvalue, fType);
}
return obj;
}
/// <summary>
/// DataRow转换为对象实例
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="row">DataRow实例</param>
/// <returns></returns>
public static T Convert2Object<T>(DataRow row) where T : new()
{
T obj = new T();
Type type = typeof(T);
string fname; object fvalue; Type fType;
for (int i = 0; i < row.Table.Columns.Count; i++)
{
fname = row.Table.Columns[i].ColumnName;//字段名
fvalue = row[fname];//值
fType = row.Table.Columns[i].DataType;//字段数据类型
PropertyInfo p = type.GetProperty(fname, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (p != null) SetValue(obj, p, fname, fvalue, fType);
}
return obj;
}
}
}

参考文档:
C#源码下载 - 自定义消息提示框工具类下载(Msg.cs)-C/S开发框架
MdiTools.cs类下载|CSFramework版本V5.0|C/S框架网
使用DeepSeek生成DevExpress表格、窗体、C#模型代码并集成到开发框架|C/S开发框架
C#统计List 字符串属性长度(返回每个属性的最大长度)|C/S开发框架
详解DevExpress.LookUpEdit控件实现自动搜索定位功能|C/S开发框架
ToolTipController超提示组件显示超提示信息在指定位置|C/S开发框架
FastReport.NET自动文本宽度+自动换行+自动行高|C/S开发框架
C#获取MAC地址包括物理网卡和虚拟网卡|C/S开发框架
CSFramework.EF.PostgreSql数据库组件 PostgreSql数据库测试报告|C/S开发框架
CSFrameworkV6快速开发框架 | 使用PostgreSql 数据库测试报告|C/S开发框架
CSFramework WebApi开发框架集成PostgreSql数据库及测试报告|C/S开发框架
DevExpress LookupEdit按回车键自动确认选择数据|C/S开发框架
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
CSFrameworkV6旗舰版开发框架 | 集成软件授权认证系统|C/S开发框架
CS软件授权注册系统|WebApi服务器介绍|C/S开发框架
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
C#源码下载 - 自定义消息提示框工具类下载(Msg.cs)-C/S开发框架
MdiTools.cs类下载|CSFramework版本V5.0|C/S框架网
使用DeepSeek生成DevExpress表格、窗体、C#模型代码并集成到开发框架|C/S开发框架
C#统计List 字符串属性长度(返回每个属性的最大长度)|C/S开发框架
详解DevExpress.LookUpEdit控件实现自动搜索定位功能|C/S开发框架
ToolTipController超提示组件显示超提示信息在指定位置|C/S开发框架
FastReport.NET自动文本宽度+自动换行+自动行高|C/S开发框架
C#获取MAC地址包括物理网卡和虚拟网卡|C/S开发框架
CSFramework.EF.PostgreSql数据库组件 PostgreSql数据库测试报告|C/S开发框架
CSFrameworkV6快速开发框架 | 使用PostgreSql 数据库测试报告|C/S开发框架
CSFramework WebApi开发框架集成PostgreSql数据库及测试报告|C/S开发框架
DevExpress LookupEdit按回车键自动确认选择数据|C/S开发框架
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
CSFrameworkV6旗舰版开发框架 | 集成软件授权认证系统|C/S开发框架
CS软件授权注册系统|WebApi服务器介绍|C/S开发框架
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
