欲忘树 发表于 2018-10-20 08:32:51

C# SQL封装(四)

///   
      /// 构建T-SQL参数 UPDATE
  
      ///
  
      ///
  
      /// 原model
  
      /// 更改后model
  
      ///
  
      public static SqlParameter[] UPDATE_T_SQL(T model, T model_change) where T : BaseModel
  
      {
  
            Type model_type = model.GetType();
  
            Type model_change_type = model_change.GetType();
  
            if (model_type.Name == model_change_type.Name)
  
            {
  
                PropertyInfo[] p_intos = model_type.GetProperties();
  
                PropertyInfo item = null;
  
                PropertyInfo item_change = null;
  
                string item_value = string.Empty;
  
                string item_change_value = string.Empty;
  
                List sql_param = null;
  
                SqlParameter cell = null;
  
                bool is_change_model = false;//是否有字段进行了更改
  
                for (int i = 0; i < p_intos.Length; i++)
  
                {
  
                  item = p_intos;
  
                  item_change = model_change_type.GetProperty(item.Name);
  
                  item_value = item.GetValue(model, null).ToString();
  
                  item_change_value = item_change.GetValue(model_change, null).ToString();
  
                  if (item.Name == "id")
  
                  {
  
                        if (item_value != item_change_value)
  
                        {
  
                            throw new Exception(
  
                              string.Format("model类 id : {0} 与model_change类id:{1} 不一致,请确保是同一条数据",
  
                                    item_value,
  
                                    item_change_value
  
                              )
  
                              );
  
                        }
  
                        else
  
                        {
  
                            if (sql_param == null) sql_param = new List();
  
                            cell = new SqlParameter(item.Name, SqlParameter_Structure.Get_SqlDbType_SqlType(item.PropertyType));
  
                            cell.Value = item.GetValue(model, null);
  
                            sql_param.Add(cell);
  
                        }
  
                  }
  
                  else
  
                  {
  
                        if (item_value != item_change_value)
  
                        {
  
                            if (!is_change_model) is_change_model = true;
  
                            if (sql_param == null) sql_param = new List();
  
                            cell = new SqlParameter(item_change.Name, SqlParameter_Structure.Get_SqlDbType_SqlType(item_change.PropertyType));
  
                            cell.Value = item_change.GetValue(model_change, null);//加入改变的值
  
                            sql_param.Add(cell);
  
                        }
  
                  }
  
                }
  
                if (is_change_model)
  
                {
  
                  return sql_param.ToArray();
  
                }
  
                else
  
                {
  
                  return null;//没有任何字段更改
  
                }
  
            }
  
            else
  
            {
  
                throw new Exception(
  
                  string.Format("model类 : {0} 与model_change类 :{1} 不匹配",
  
                        model_type.Name,
  
                        model_change_type.Name
  
                        )
  
                  );
  
            }
  
      }


页: [1]
查看完整版本: C# SQL封装(四)