zoukankan      html  css  js  c++  java
  • .NET 利用反射将对象数据添加到数据库

    一些小型的项目,在不使用其他的框架(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;

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

     

      

  • 相关阅读:
    2016/3/16 高级查询 ①连接查询 ②联合查询 ③子查询 无关 相关
    2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )
    2016/3/13 MySQL 增删查改 CRUD 用代码实现
    2016/3/10 数据库简单操作( 创建数据库 创建表 数值类型 主键 外键 自动递增 )
    2016/3/10 PHP环境搭建 LAMP WAMP
    2016/3/10 PHP (超文本预处理器) 是什么?
    2016/3/1 淘宝 腾讯 网易 css初始化代码 以及最基础的初始化
    判断i在字符串中出现的次数(2016.1.12P141-1)
    2016-1-9作业——输出二维数组的和
    2016-1-8作业
  • 原文地址:https://www.cnblogs.com/wcheng/p/3335246.html
Copyright © 2011-2022 走看看