控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

NET 利用反射将对象数据添加到数据库

作者:未知 出处:cnblog 2013年09月24日 阅读:

一些小型的项目,在不使用其他的框架(LINQ,NHibernate,EF等等框架)的前提下,这时候一些反复的增删改查就会让我们感到极其的繁琐,厌烦,为了避免这种情况出现,本人写了一个小的工具类.自动将实体类添加到数据库.

实现功能的思路:

  1,通过反射获取该对象名称和所有属性名称,然后组合成insert SQL字符串

  (前提是对象属性名称和数据库字段名称一致,表名称和实体类名称一致.不区分大小写).

  2,通过反射获取该对象的每个属性值,并动态的往已经定义好的SqlParameter数组里添加SqlParameter,

  SqlParameter参数的名称与属性名称一致. 

  3,执行SQL。

开始代码:

  CODE_1,定义方法命名先,第一参数是需要插入数据的对象实例,第二个参数是自动增长的主键名称(不区分大小写)

public static int Insert(Object obj, string identityName)
{
}
CODE_2,反射获取对象数据

StringBuilder commandText = new StringBuilder(" insert into ");
 Type type = obj.GetType();
string tableName = type.Name;//表名称
PropertyInfo[] pros = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);//所有字段名称
StringBuilder fieldStr = new StringBuilder();//拼接需要插入数据库的字段
  StringBuilder paramStr = new StringBuilder();//拼接每个字段对应的参数
int len = pros.Length;
  if (!"".Equals(identityName) && null != identityName) param = new SqlParameter[len-1];//如果有自动增长的字段,则该字段不需要SqlParameter
  int paramLIndex = 0;
  for (int i = 0; i < len; i++)
  {
    string fieldName = pros[i].Name;
      if (!fieldName.ToUpper().Equals(identityName.ToUpper()))
      {//非自动增长字段才加入SQL语句
        fieldStr.Append(fieldName);
          string paramName = "@" + fieldName;//SQL语句的字段名称和参数名称保持一致
            paramStr.Append(paramName);
          if (i < (len - 1))
          {
            fieldStr.Append(",");//参数和字段用逗号隔开
                paramStr.Append(",");
          }
          object val = type.GetProperty(fieldName).GetValue(obj, null);// 根据属性名称获取当前属性的值
            if (val == null) val = DBNull.Value;//如果该值为空的话,则将其转化为数据库的NULL
          param[paramLIndex] = new SqlParameter(fieldName, val);//给每个参数赋值
            paramLIndex++;
      }
   }
              
   commandText.Append(tableName);
   commandText.Append(" ( ");
   commandText.Append(fieldStr);
   commandText.Append(" ) values ( ");
   commandText.Append(paramStr);
   commandText.Append(" ) ");//拼接成完整的字符串
 
DBHelp.ExcuteSave(commandText.ToString(), param)//执行该INSERT SQL 语句
最后一行执行SQL语句的代码就不需要再说了吧..... 

其实如果能自动生成指定数据库的实体类,那么又减轻的一些繁琐的工作,下一篇我将会写到如何根据指定的数据库生成简单的实体类

反射需要引用到的控件名称为

using System.Reflection;

欢迎各路同行来拍砖。。。。。

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统