C#对象转DataRow,主键值自动生成
C#对象转DataRow,主键值自动生成
C# Code: public static class DataConverter { public static List<T> ToObject<T>(DataTable dt) where T : new() { List<T> list = new List<T>(); foreach (DataRow R in dt.Rows) list.Add(ToObject<T>(R)); return list; } public static T ToObject<T>(DataRow row) where T : new() { T obj = new T(); Type type = typeof(T); string fname; object tv; object fvalue; for (int i = 0; i < row.Table.Columns.Count; i++) { fname = row.Table.Columns[i].ColumnName; fvalue = row[fname]; PropertyInfo p = type.GetProperty(fname, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.IgnoreCase); if (p != null) { if (p.PropertyType.IsArray)//数组类型,单独处理 { p.SetValue(obj, fvalue, null); } else { if (String.IsNullOrEmpty(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); } } } return obj; } public static void ToRow(object obj, DataRow row, bool removeInjection = true) { Type type = obj.GetType(); string fname; object fvalue; for (int i = 0; i < row.Table.Columns.Count; i++) { fname = row.Table.Columns[i].ColumnName; PropertyInfo p = type.GetProperty(fname, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.IgnoreCase); if (p != null) { fvalue = p.GetValue(obj); //移除注入攻击关键词 if (p.PropertyType == typeof(string) && fvalue != null && !String.IsNullOrWhiteSpace(fvalue.ToString())) fvalue = SQLInjection.RemoveKeywords(fvalue.ToString()); row[fname] = fvalue; } } } } //来源:C/S框架网(www.csframework.com) QQ:23404761 生成流水单号,记录唯一主键,如:201912311028033450859061 C# Code: public static string GetRowID() { string sn = new Random().Next(1, 1000000).ToString().PadLeft(7, '0'); return DateTime.Now.ToString("yyyyMMddHHmmssfff") + sn; } //来源:C/S框架网(www.csframework.com) QQ:23404761 测试: C# Code: public static void PostData(ModelRequest data) { //获取表结构 DataTable dt = dalHelper.GetEmptyTableCache(tb_DocList.__TableName); //对象转换为记录DataRow DataConverter.ToRow(data, dt.Rows.Add()); dt.Rows[0]["RowID"] = WebApiGlobals.GetRowID();//记录主键 //DAL层实例 dalBaseDataDict dal = new dalBaseDataDict(typeof(tb_DocList)); dal.Database = _Database; bool ok = dal.Update(dt);//提交数据 } //来源:C/S框架网(www.csframework.com) QQ:23404761
参考文档:
数据字典开发灵活吗?能不能做到根据表结构定义自动生成? 基于C#.NET C/S快速开发框架 - 代码自动生成功能 C/S快速开发框架 - 代码自动生成视频下载 C# 自动生成Goolge/Baidu的SiteMap.xml文件 CS开发框架的客户端可以自动生成吗? CS开发框架 - 业务单据自动生成功能设计(原) 客户要求开发框架能自动生成数据窗体及log日志表 C# 实现条码图片自动生成功能 C/S框架后台数据更新模型之ORM自动生成SQL基本原理 你的开发框架能自动生成WebService层的接口吗? 手动和自动生成业务单据号码UpdateKeyMode详解(1) CSFramework代码生成器自动生成主从表界面-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内容管理系统 | |