/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dba"></param> /// <param name="dynamicJson"></param> /// <param name="columns"></param> /// <returns></returns> public DbParameter[] BuildParameter(Type t, DBAccessor dba, DynamicJson dynamicJson, ref IList <string> columns) { IList <DbParameter> paras = new List <DbParameter>(); PropertyInfo[] propertys = t.GetProperties().Where(a => a.GetAttribute <EdmScalarPropertyAttribute>() != null).ToArray(); if (propertys.Count() == 0) { propertys = t.GetProperties().Where(a => a.GetAttribute <ColumnAttribute>() != null).ToArray(); } foreach (var columnName in dynamicJson.Keys) { try { bool isDate = false; var p = propertys.FirstOrDefault(b => b.Name.ToUpper() == columnName.ToUpper()); if (p != null && p.PropertyType == typeof(DateTime)) { isDate = true; } if (columnName.StartsWith("_") || propertys.Count(b => b.Name.ToUpper() == columnName.ToUpper()) == 0) { continue; } if (dynamicJson.ContainsKey(columnName)) { object v = dynamicJson.Get(columnName); if (isDate) { v = v.Convert <DateTime>(); } else if (v.ToString().ToUpper() == "TRUE" || v.ToString().ToUpper() == "FALSE") { v = v.Convert <bool>() ? 1 : 0; } paras.Add(dba.CreateDbParameter(columnName, v)); } columns.Add(columnName); } catch (Exception ex) { Loger.Log(Assembly.GetExecutingAssembly().FullName, MethodBase.GetCurrentMethod().FullName() + "\r\n列名->\r\n" + columnName, ex); } } return(paras.ToArray()); }
/// <summary> /// /// </summary> /// <param name="dba"></param> /// <param name="dynamicJson">以下划线开头的key不会构建参数</param> /// <returns></returns> public DbParameter[] BuildParameter(DBAccessor dba, DynamicJson dynamicJson) { IList <DbParameter> paras = new List <DbParameter>(); foreach (var columnName in dynamicJson.Keys) { try { bool isDate = false; if (dynamicJson.GetStr(columnName) != null && columnName.Contains("Date")) { isDate = true; } if (columnName.StartsWith("_")) { continue; } if (dynamicJson.ContainsKey(columnName)) { var dp = dba.CreateDbParameter(columnName, isDate ? dynamicJson.Get(columnName).Convert <DateTime>() : dynamicJson.Get(columnName)); if (columnName == "rs_1" && dp.GetType().FullName.Contains("Oracle")) { (dp as OracleParameter).OracleDbType = OracleDbType.RefCursor; dp.Direction = ParameterDirection.Output; } paras.Add(dp); } } catch (Exception ex) { Loger.Log(Assembly.GetExecutingAssembly().FullName, MethodBase.GetCurrentMethod().FullName() + "\r\n列名->\r\n" + columnName, ex); } } return(paras.ToArray()); }