使用dalBaseDataDict类提交单表数据
使用dalBaseDataDict类提交单表数据
1. 首先获取表结构(DataTable)。 2. 新增DataRow, 将对象属性赋值到DataRow的字段(对象属性名称与字段名称必须一致) 3. 调用dalBaseDataDict.Update接口提交数据。 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#对象转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
参考文档:
Asp.Net防止多次提交数据(转) 使用SqlCommand提交数据:命令的Transaction 属性尚未初始化 提交数据时生成的SQL脚本便于实时跟踪 对象的属性若使用get;set;访问器没有指定成员变量,代码混淆后会丢失数据 无DAL数据访问层提交单个表的数据 使用DbProviderFactories.GetFactory方法需要配置数据库提供者 如何使用多数据库IDatabase接口以及数据访问层应用 使用观察者模式实时更新程序打开多个界面绑定组件的数据源 C/S开发框架DAL层提交数据报错"外键值为空!"解决方案。 使用DataBinderTools工具类绑定下拉LookupEdit组件数据源 怎样将DAL层提交数据默认为系统数据库? C#使用Multipart form-data方式上传文件及提交其他数据 CSFramework通用自动提交数据工具类(DbDataUpdate),支持MsSQL,MySQL,Oracle三种数据库 DbDataUpdate - 自动提交对象模型数据 - 常用数据类型测试 C# Winform 使用SUM CASE WHEN实现动态列交叉数据报表
其它资料:
什么是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内容管理系统 | |