public static DbParameter[] BuildDbParameters(string cmdText, object entity, Func <DbParameter> dbParamConstructor, Func <string, string> ParamNameBuilder) { if (entity == null) { return(new DbParameter[0]); } Type t = entity.GetType(); List <string> list = Analyst.GetSqlParamNameList(cmdText); List <DbParameter> pList = new List <DbParameter>(list.Count); foreach (string pName in list) { DbParameter parm = dbParamConstructor(); var proInfo = t.GetProperty(pName); if (proInfo == null) { throw new ApplicationException("没有找到SQL参数" + pName + "的赋值;\r\n\r\n【SQL语句】\r\n" + cmdText); } object tmp = proInfo.GetGetMethod().Invoke(entity, new object[0]); tmp = GetIntValueIfEnum(tmp); parm.ParameterName = ParamNameBuilder(pName); parm.Value = (tmp == null ? DBNull.Value : tmp); pList.Add(parm); } return(pList.ToArray()); }
public static DbParameter[] BuildDbParameters <T>(string cmdText, T entity, Func <DbParameter> dbParamConstructor, InputMap <T> map, char sqlParamSplitter) where T : class { List <string> list = Analyst.GetSqlParamNameList(cmdText); List <ParameterProperty <T> > maps = (map == null) ? null : map.GetMaps(); if (maps == null) { maps = new List <ParameterProperty <T> >(0); } List <DbParameter> pList = new List <DbParameter>(list.Count); foreach (string pName in list) { DbParameter parm = dbParamConstructor(); parm.ParameterName = pName; ParameterProperty <T> pp = maps.Find(p => p.Parameter == pName); string[] proArray; if (pp != null) { proArray = pp.PropertyList.ToArray(); } else { proArray = pName.Split(sqlParamSplitter); } object tmp = GetFieldValueAllowNull(entity, proArray); parm.Value = (tmp == null ? DBNull.Value : tmp); pList.Add(parm); } return(pList.ToArray()); }