使用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
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
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
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/S开发框架教程:使用基础资料(数据字典)的DAL层更新主从表(或多表)数据
使用DeepSeek生成DevExpress表格、窗体、C#模型代码并集成到开发框架|C/S开发框架
CSFrameworkV6快速开发框架 | 使用PostgreSql 数据库测试报告|C/S开发框架
使用Photoshop PS制作GIF动画(等待窗体GIF图标)|C/S开发框架
Oracle数据库名称有小数点,使用expdp备份失败:ORA|12154: TNS: 无法解析指定的连接标识符|C/S开发框架
ORACLE 使用 expdp 命令导出dmp数据库文件|C/S开发框架
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
.NET Reactor(.NET混淆器)加壳软件使用|C/S开发框架
CSFramework开发框架使用.NET Reactor加壳软件导致多语言失效|C/S开发框架
ISID字段介绍,能直接用ISID字段作为主键使用吗?|C/S开发框架
CSFramework软件开发框架 | 使用扩展角色实现自定义权限控制|C/S开发框架
达梦数据库 | 使用DM数据迁移工具迁移CSFrameworkV6数据库|C/S框架网|C/S开发框架
达梦数据库 | DM管理工具使用指南|C/S框架网|C/S开发框架
使用.NET8/EFCore访问达梦数据库|C/S框架网|C/S开发框架
C/S架构软件开发平台旗舰版V6.0 | 使用FastReport.NET制作二维码报表|C/S开发框架
单表基础资料窗体使用res模型案例|C/S开发框架
C/S开发框架教程:使用基础资料(数据字典)的DAL层更新主从表(或多表)数据
使用DeepSeek生成DevExpress表格、窗体、C#模型代码并集成到开发框架|C/S开发框架
CSFrameworkV6快速开发框架 | 使用PostgreSql 数据库测试报告|C/S开发框架
使用Photoshop PS制作GIF动画(等待窗体GIF图标)|C/S开发框架
Oracle数据库名称有小数点,使用expdp备份失败:ORA|12154: TNS: 无法解析指定的连接标识符|C/S开发框架
ORACLE 使用 expdp 命令导出dmp数据库文件|C/S开发框架
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
.NET Reactor(.NET混淆器)加壳软件使用|C/S开发框架
CSFramework开发框架使用.NET Reactor加壳软件导致多语言失效|C/S开发框架
ISID字段介绍,能直接用ISID字段作为主键使用吗?|C/S开发框架
CSFramework软件开发框架 | 使用扩展角色实现自定义权限控制|C/S开发框架
达梦数据库 | 使用DM数据迁移工具迁移CSFrameworkV6数据库|C/S框架网|C/S开发框架
达梦数据库 | DM管理工具使用指南|C/S框架网|C/S开发框架
使用.NET8/EFCore访问达梦数据库|C/S框架网|C/S开发框架
C/S架构软件开发平台旗舰版V6.0 | 使用FastReport.NET制作二维码报表|C/S开发框架
单表基础资料窗体使用res模型案例|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内容管理系统 |
在线客服
