C# ORM 反射与泛型的交叉应用 - 获取泛型与数据库对应字段的值并存入数据库
2017-07-19 12:52
561 查看
废话 不说直入正题
步骤
获取泛型类型获取泛型属性
由泛型属性匹配数据库字段
获取匹配成功的字段名称
获取匹配成功的属性值
建立 SQL 语句执行
代码
这里没有使用 SqlParameters ,考虑到参数类型是可变的,于是就使用了 StringBuilder 来创建字符串并完成拼接
private const string INSERT = "INSERT INTO dbo.Alvin"; public static int Create<TEntity>(TEntity entity) { using (var conn = SqlHelper.Instance.GetConnection()) { Type type = typeof(TEntity); PropertyInfo[] infos = type.GetProperties(); StringBuilder sbP = new StringBuilder(); sbP.Append("("); StringBuilder sbV = new StringBuilder(); sbV.Append(" VALUES("); foreach (var info in infos) { object[] objs = info.GetCustomAttributes(typeof(FieldAttribute), false); if (objs != null) { //获取字段名称 string s = ((FieldAttribute)objs[0]).Fields; sbP.Append(s+","); //Console.WriteLine("字段名称:{0}", ((FieldAttribute)objs[0]).Fields); //通过type 获取对应的字段,然后通过 getvalue 获取到值 // Console.WriteLine("字段值:{0}", type.GetProperty(s).GetValue(entity, null)); //注意这里必须要加上 '' 否则存入的时候会在datatime的转换上出现问题导致崩溃 sbV.Append("'"+type.GetProperty(s).GetValue(entity, null) + "',"); } } //获取完所有值,去掉尾部 , 并添加上真正的尾部 sbP.Append(")"); sbP.Replace(",)", ")"); sbV.Append(")"); sbV.Replace(",)", ") SELECT SCOPE_IDENTITY()"); string sql = INSERT + sbP.ToString() + sbV.ToString(); //Console.WriteLine("SQL 语句:{0}", sql); //插入 int insertedId = SqlHelper.Instance.ExecuteScalar<int>(conn, sql, new List<SqlParameter>() { }); return insertedId; } }
效果
相关文章推荐
- C# ORM中反射与泛型的交叉应用 - 动态创建泛型实例并为其赋值
- mysql+jsp,在jsp页面连接了数据库,已成功获取数据库字段,请问如何取到当前用户对应的信息
- 性别字段在数据库中存储数字,查询时,如何查询出数字对应的男和女?(case when的应用)
- c# 自定义字段对应数据库的基类与反射赋值
- 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类
- 通过反射获取父类中的泛型参数对应的Class对象
- delphi中更新表字段update BLOB型数据(image)/获取图片转成BLOB型存入数据库
- 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类
- 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类
- Javabean反射入门(数据库中一个表的字段用来名称,另一个表用来存储名称对应的值)
- 获取数据库中两个时间字段的相差天数及ABS/DATEDIFF函数应用
- C# ORM 泛型与反射的交叉应用 - 更新表中除了主键的所有数据
- 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类
- 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类
- mysql获取外键, 根据数据库名和表名获取表所对应的所有外键
- 如何简化数据库的访问与操作,兼谈泛型的应用
- mysql获取数据库中的所有表、所有字段
- C#中,实体属性与数据库字段的进行反射赋值收藏
- 怎样才能将数据库中表PBCATCOL的PBC_LABL字段的值反向到PDM对应的NAME?
- 将B数据库客户基本信息表中的字段插入到A数据库表中对应的字段中