using EasyNet.DBUtility; using System; using System.Collections.Generic; using System.Data; using System.Reflection; using System.Text; namespace EasyNet.Common { public class DbEntityUtils { public static string GetTableName(Type classType, DbOperateType type) { var sTableName = string.Empty; var sEntityName = string.Empty; sEntityName = classType.FullName; var attr = classType.GetCustomAttributes(false); if (attr.Length == 0) return sTableName; foreach (object classAttr in attr) { if (classAttr is SqlSugar.SugarTable) { var tableAttr = classAttr as SqlSugar.SugarTable; sTableName = tableAttr.TableName; } } if (string.IsNullOrEmpty(sTableName) && (type == DbOperateType.INSERT || type == DbOperateType.UPDATE || type == DbOperateType.DELETE)) { throw new Exception("實體類:" + sEntityName + "的屬性配置[Table(name=\"tablename\")]錯誤或未配置"); } return sTableName; } public static string GetPrimaryKey(object attribute, DbOperateType type) { var strPrimary = string.Empty; var attr = attribute as SqlSugar.SugarColumn; if (type == DbOperateType.INSERT) { if (!attr.IsIdentity) { strPrimary = Guid.NewGuid().ToString(); } } else { strPrimary = attr.ColumnName; } return strPrimary; } public static string GetColumnName(object attribute) { var columnName = string.Empty; if (attribute is SqlSugar.SugarColumn) { var columnAttr = attribute as SqlSugar.SugarColumn; columnName = columnAttr.ColumnName; } return columnName; } public static TableInfo GetTableInfo(object entity, DbOperateType dbOpType, PropertyInfo[] properties) { var breakForeach = false; var strPrimaryKey = string.Empty; var tableInfo = new TableInfo(); var type = entity.GetType(); tableInfo.TableName = GetTableName(type, dbOpType); if (dbOpType == DbOperateType.COUNT) { return tableInfo; } foreach (PropertyInfo property in properties) { object propvalue = null; var columnName = string.Empty; var propName = columnName = property.Name; propvalue = ReflectionHelper.GetPropertyValue(entity, property); var propertyAttrs = property.GetCustomAttributes(false); if (columnName == "RowIndex") { continue; } for (int i = 0; i < propertyAttrs.Length; i++) { var propertyAttr = propertyAttrs[i]; if (DbEntityUtils.IsCaseColumn(propertyAttr, dbOpType)) { breakForeach = true; break; } var tempVal = GetColumnName(propertyAttr); columnName = string.IsNullOrEmpty(tempVal) ? propName : tempVal; if (propertyAttr is SqlSugar.SugarColumn) { var oId = new IdInfo { Key = columnName }; if (dbOpType == DbOperateType.INSERT || dbOpType == DbOperateType.DELETE) { var idAttr = propertyAttr as SqlSugar.SugarColumn; tableInfo.Strategy = idAttr.IsIdentity; oId.Strategy = idAttr.IsIdentity; if (CommonUtils.IsNullOrEmpty(propvalue)) { strPrimaryKey = DbEntityUtils.GetPrimaryKey(propertyAttr, dbOpType); if (!string.IsNullOrEmpty(strPrimaryKey)) propvalue = strPrimaryKey; } } oId.Value = propvalue; if (tableInfo.Id.Key == null) { tableInfo.Id = oId; } tableInfo.Ids.Add(oId); tableInfo.Keycolumns.Put(propName, columnName); tableInfo.PropToColumn.Put(propName, columnName); breakForeach = true; } } //if (breakForeach && dbOpType == DbOperateType.DELETE) break; if (breakForeach) { breakForeach = false; continue; } tableInfo.Columns.Put(columnName, propvalue); tableInfo.PropToColumn.Put(propName, columnName); } if (dbOpType == DbOperateType.UPDATE) { tableInfo.Columns.Put(tableInfo.Id.Key, tableInfo.Id.Value); } return tableInfo; } public static List ToList(IDataReader sdr, TableInfo tableInfo, PropertyInfo[] properties) where T : new() { var list = new List(); while (sdr.Read()) { var entity = new T(); foreach (PropertyInfo property in properties) { if (property.Name == EasyNetGlobalConstWord.ROWINDEX) continue; var name = tableInfo.PropToColumn[property.Name].ToString(); if (tableInfo.TableName == string.Empty) { if (DbEntityUtils.IsCaseColumn(property, DbOperateType.SELECT)) continue; ReflectionHelper.SetPropertyValue(entity, property, sdr[name]); continue; } ReflectionHelper.SetPropertyValue(entity, property, sdr[name]); } list.Add(entity); } return list; } public static List ToList(IDataReader sdr) where T : new() { var list = new List(); var properties = ReflectionHelper.GetProperties(new T().GetType()); while (sdr.Read()) { var entity = new T(); foreach (PropertyInfo property in properties) { var name = property.Name; if (name == EasyNetGlobalConstWord.ROWINDEX) continue; ReflectionHelper.SetPropertyValue(entity, property, sdr[name]); } list.Add(entity); } return list; } public static List ToListForQuery(IDataReader sdr) where T : new() { var list = new List(); var properties = ReflectionHelper.GetProperties(new T().GetType()); while (sdr.Read()) { var entity = new T(); for (int index = 0; index < sdr.FieldCount; index++) { var name = sdr.GetName(index); var property = ReflectionHelper.GetProperty(properties, name); if (property == null) continue; ReflectionHelper.SetPropertyValue(entity, property, sdr.GetValue(index)); } list.Add(entity); } return list; } public static List> ToListForQuery(IDataReader sdr, PropertyInfo[] properties) { var list = new List>(); while (sdr.Read()) { var dic = new Dictionary(); for (int index = 0; index < sdr.FieldCount; index++) { var name = sdr.GetName(index); var property = ReflectionHelper.GetProperty(properties, name); if (property == null) continue; dic.Add(property.Name, sdr.GetValue(index)); } list.Add(dic); } return list; } public static string GetQuerySql(TableInfo tableInfo, DbCondition condition) { var sbColumns = new StringBuilder(); tableInfo.Columns.Put(tableInfo.Id.Key, tableInfo.Id.Value); foreach (String key in tableInfo.Columns.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append(","); } if (sbColumns.Length > 0) sbColumns.Remove(sbColumns.ToString().Length - 1, 1); var sSqls = String.Empty; if (String.IsNullOrEmpty(condition.queryString)) { sSqls = "SELECT {0} FROM {1}"; sSqls = string.Format(sSqls, sbColumns.ToString(), GetFullTableName(tableInfo)); sSqls += condition.ToString(); } else { sSqls = condition.ToString(); } sSqls = sSqls.ToUpper(); return sSqls; } public static string GetQueryAllSql(TableInfo tableInfo) { var sbColumns = new StringBuilder(); tableInfo.Columns.Put(tableInfo.Id.Key, tableInfo.Id.Value); foreach (String key in tableInfo.Columns.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append(","); } if (sbColumns.Length > 0) sbColumns.Remove(sbColumns.ToString().Length - 1, 1); var sSqls = "SELECT {0} FROM {1}"; sSqls = string.Format(sSqls, sbColumns.ToString(), GetFullTableName(tableInfo)); return sSqls; } public static string GetQueryByIdSql(TableInfo tableInfo) { var sbColumns = new StringBuilder(); //if (tableInfo.Columns.ContainsKey(tableInfo.Id.Key)) // tableInfo.Columns[tableInfo.Id.Key] = tableInfo.Id.Value; //else // tableInfo.Columns.Put(tableInfo.Id.Key, tableInfo.Id.Value); foreach (String key in tableInfo.PropToColumn.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append(","); } if (sbColumns.Length > 0) sbColumns.Remove(sbColumns.ToString().Length - 1, 1); var sSqls = "SELECT {0} FROM {1} WHERE {2} = " + AdoHelper.DbParmChar + "{2}"; sSqls = string.Format(sSqls, sbColumns.ToString(), GetFullTableName(tableInfo), tableInfo.Id.Key); return sSqls; } public static string GetQueryByFieldSql(TableInfo tableInfo, string field) { var sbColumns = new StringBuilder(); foreach (String key in tableInfo.PropToColumn.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append(","); } if (sbColumns.Length > 0) sbColumns.Remove(sbColumns.ToString().Length - 1, 1); var sSqls = "SELECT {0} FROM {1} WHERE {2} = " + AdoHelper.DbParmChar + "{2}"; sSqls = string.Format(sSqls, sbColumns.ToString(), GetFullTableName(tableInfo), field); return sSqls; } public static string GetQueryByObjSql(TableInfo tableInfo, ref Dictionary wh, Dictionary sort = null) { var sbColumns = new StringBuilder(); var sWheres = new StringBuilder(); var sSorts = new StringBuilder(); foreach (String key in tableInfo.PropToColumn.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append(","); } if (wh != null) { var newWh = new Dictionary(); var pm_wh = new ParamMap(); pm_wh.Paramters(wh); foreach (string key in pm_wh.Keys) { if (key != EasyNetGlobalConstWord.SORT) { var sParmChar = new StringBuilder(); var sKey = ""; object sVal = ""; var nKey = DbKeywords.FormatColumnName(key.Trim()); switch (nKey) { case "_OR_": sParmChar = GetWhsOrChid(key, pm_wh, ref sKey, ref sVal); var oOr = sVal as Object[]; foreach (Object jo in oOr) { var dic = jo as Dictionary; foreach (string keyNew in dic.Keys) { if (!newWh.ContainsKey(keyNew)) { newWh.Add(keyNew, dic[keyNew]); } } } break; case "_AND_": sParmChar = GetWhsAndChid(key, pm_wh, ref sKey, ref sVal); if (sVal != null && sVal.ToString() != "") { var oAnd = sVal as Object[]; foreach (Object jo in oAnd) { if (jo != null) { var dic = jo as Dictionary; foreach (string keyNew in dic.Keys) { if (!newWh.ContainsKey(keyNew)) { newWh.Add(keyNew, dic[keyNew]); } } } } } break; default: sParmChar = GetWhsAnd(key, pm_wh, ref sKey, ref sVal); newWh.Add(sKey, sVal); break; } if (sParmChar.Length > 0) { sWheres.Append(sParmChar).Append(" AND "); } } } wh = newWh; } if (sort != null) { foreach (string key in sort.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sSorts.Append(nKey).Append(" " + sort[nKey]).Append(","); } } if (sbColumns.Length > 0) sbColumns.Remove(sbColumns.ToString().Length - 1, 1); if (sWheres.Length > 0) sWheres.Remove(sWheres.ToString().Length - 4, 4); if (sSorts.Length > 0) sSorts.Remove(sSorts.ToString().Length - 1, 1); var sSqls = "SELECT {0} FROM {1}" + ((sWheres.Length == 0) ? "" : " WHERE {2} ") + ((sSorts.Length == 0) ? "" : " ORDER BY {3} "); sSqls = string.Format(sSqls, sbColumns.ToString(), GetFullTableName(tableInfo), sWheres.ToString(), sSorts.ToString()); //if (sWheres.Length == 0) sSqls.Remove(sSqls.ToString().Length - 8, 8); return sSqls; } public static string GetQueryCountSql(TableInfo tableInfo) { var sbColumns = new StringBuilder(); var sSqls = "SELECT COUNT(0) FROM {1} "; sSqls = string.Format(sSqls, sbColumns.ToString(), GetFullTableName(tableInfo)); foreach (String key in tableInfo.Columns.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append("=").Append(AdoHelper.DbParmChar).Append(key); } if (sbColumns.Length > 0) { sSqls += " WHERE " + sbColumns.ToString(); } return sSqls; } public static string GetQueryCountSql(TableInfo tableInfo, DbCondition condition) { var sSqls = "SELECT COUNT(0) FROM {0}"; sSqls = string.Format(sSqls, GetFullTableName(tableInfo)); sSqls += condition.ToString(); return sSqls; } public static string GetQueryByPropertySql(TableInfo tableInfo) { var sbColumns = new StringBuilder(); tableInfo.Columns.Put(tableInfo.Id.Key, tableInfo.Id.Value); foreach (String key in tableInfo.Columns.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append(","); } if (sbColumns.Length > 0) sbColumns.Remove(sbColumns.ToString().Length - 1, 1); var sSqls = "SELECT {0} FROM {1} WHERE {2} = " + AdoHelper.DbParmChar + "{2}"; sSqls = string.Format(sSqls, sbColumns.ToString(), GetFullTableName(tableInfo), tableInfo.Id.Key); return sSqls; } public static string GetQueryByPage(TableInfo tableInfo, ref ParamMap pm) { var sbColumns = new StringBuilder(); var sbWhs = new StringBuilder(); //tableInfo.Columns.Put(tableInfo.Id.Key, tableInfo.Id.Value); foreach (String key in tableInfo.PropToColumn.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append(","); } if (pm.Keys.Count > 0) { var newPm = new ParamMap(); var BRemoveOr = false; var BRemoveAnd = false; foreach (string key in pm.Keys) { if (key != EasyNetGlobalConstWord.SORT) { var sParmChar = new StringBuilder(); var sKey = ""; object sVal = ""; if (key == "pageStart" || key == "pageEnd") { continue; } switch (key) { case "_OR_": sParmChar = GetWhsOrChid(key, pm, ref sKey, ref sVal); var oOr = sVal as Object[]; foreach (Object jo in oOr) { var dic = jo as Dictionary; foreach (string keyNew in dic.Keys) { if (!newPm.ContainsKey(keyNew)) { newPm.Put(keyNew, dic[keyNew]); } } } BRemoveOr = true; break; case "_AND_": sParmChar = GetWhsAndChid(key, pm, ref sKey, ref sVal); if (sVal != null && sVal.ToString() != "") { var oAnd = sVal as Object[]; foreach (Object jo in oAnd) { if (jo != null) { var dic = jo as Dictionary; foreach (string keyNew in dic.Keys) { if (!newPm.ContainsKey(keyNew)) { newPm.Put(keyNew, dic[keyNew]); } } } } } BRemoveAnd = true; break; default: sParmChar = GetWhsAnd(key, pm, ref sKey, ref sVal); newPm.Put(sKey, sVal); break; } if (sParmChar.Length > 0) { sbWhs.Append(sParmChar).Append(" AND "); } } } if (BRemoveOr) { pm.Remove("_OR_"); } if (BRemoveAnd) { pm.Remove("_AND_"); } foreach (String key in newPm.Keys) { pm.Put(key, newPm[key]); } //pm = newPm; } if (sbColumns.Length > 0) sbColumns.Remove(sbColumns.ToString().Length - 1, 1); var sSqls = "SELECT {0} FROM {1}"; if (sbWhs.Length > 0) { sbWhs.Remove(sbWhs.ToString().Length - 5, 5); sSqls += " WHERE {2}"; } sSqls = string.Format(sSqls, sbColumns.ToString(), GetFullTableName(tableInfo), sbWhs); return sSqls; } public static string GetAutoSql() { var autoSQL = ""; if (AdoHelper.DbType == DatabaseType.SQLSERVER) { autoSQL = " select scope_identity() as AutoId "; } if (AdoHelper.DbType == DatabaseType.ACCESS) { autoSQL = " select @@IDENTITY as AutoId "; } if (AdoHelper.DbType == DatabaseType.MYSQL) { autoSQL = " ;select @@identity "; } return autoSQL; } public static string GetFullTableName(TableInfo tbinfo) { var sTableName = ""; if (AdoHelper.DbType == DatabaseType.SQLSERVER) { sTableName = tbinfo.TableName; } if (AdoHelper.DbType == DatabaseType.ACCESS) { } if (AdoHelper.DbType == DatabaseType.MYSQL) { } return sTableName; } public static string GetInsertSql(TableInfo tableInfo) { var sbColumns = new StringBuilder(); var sbValues = new StringBuilder(); foreach (IdInfo Id in tableInfo.Ids) { if (!Id.Strategy) { if (!Id.Strategy && tableInfo.Id.Value == null) { Id.Value = Guid.NewGuid().ToString(); } if (Id.Value != null) { tableInfo.Columns.Put(Id.Key, Id.Value); } } } foreach (String key in tableInfo.Columns.Keys) { var value = tableInfo.Columns[key]; if (!string.IsNullOrEmpty(key.Trim()) && value != null) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbColumns.Append(nKey).Append(","); sbValues.Append(AdoHelper.DbParmChar).Append(key).Append(","); } } if (sbColumns.Length > 0 && sbValues.Length > 0) { sbColumns.Remove(sbColumns.ToString().Length - 1, 1); sbValues.Remove(sbValues.ToString().Length - 1, 1); } var sSqls = "INSERT INTO {0}({1}) VALUES({2})"; sSqls = string.Format(sSqls, GetFullTableName(tableInfo), sbColumns.ToString(), sbValues.ToString()); //if (tableInfo.Strategy == GenerationType.INDENTITY && (AdoHelper.DbType == DatabaseType.SQLSERVER || AdoHelper.DbType == DatabaseType.MYSQL)) //{ // string autoSql = DbEntityUtils.GetAutoSql(); // sSqls = sSqls + autoSql; //} return sSqls; } public static string GetUpdateSql(TableInfo tableInfo) { var sbBody = new StringBuilder(); foreach (String key in tableInfo.Columns.Keys) { var value = tableInfo.Columns[key]; if (IsCaseColumn(tableInfo, key)) continue; if (!string.IsNullOrEmpty(key.Trim()) && value != null) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sbBody.Append(nKey).Append("=").Append(AdoHelper.DbParmChar + key).Append(","); } } if (sbBody.Length > 0) sbBody.Remove(sbBody.ToString().Length - 1, 1); tableInfo.Columns.Put(tableInfo.Id.Key, tableInfo.Id.Value); var sSqls = "update {0} set {1} where {2} =" + AdoHelper.DbParmChar + tableInfo.Id.Key; sSqls = string.Format(sSqls, GetFullTableName(tableInfo), sbBody.ToString(), tableInfo.Id.Key); return sSqls; } public static string GetDeleteByIdSql(TableInfo tableInfo) { var sSql = "delete from {0} where {1}"; var sWheres = new StringBuilder(); foreach (IdInfo oId in tableInfo.Ids) { sWheres.Append(oId.Key).Append(" = " + AdoHelper.DbParmChar + oId.Key).Append(" and "); } if (sWheres.Length > 0) sWheres.Remove(sWheres.ToString().Length - 4, 4); sSql = string.Format(sSql, GetFullTableName(tableInfo), sWheres); return sSql; } public static string GetDeleteByFieldSql(TableInfo tableInfo, string FieldName) { var sSqls = "delete from {0} where {1} =" + AdoHelper.DbParmChar + FieldName; sSqls = string.Format(sSqls, GetFullTableName(tableInfo), FieldName); return sSqls; } public static string GetInsertByObjSql(TableInfo tableInfo, Dictionary val) { var sbColumns = new StringBuilder(); var sbValues = new StringBuilder(); foreach (IdInfo Id in tableInfo.Ids) { var sGuid = Guid.NewGuid().ToString(); if (Id.Key != null && Id.Strategy) { continue; } if (val.ContainsKey(Id.Key)) { if (val[Id.Key] == null || val[Id.Key].ToString() == "") { val[Id.Key] = sGuid; } } else { val.Add(Id.Key, sGuid); } } foreach (String key in val.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); if (tableInfo.PropToColumn.ContainsKey(key)) { sbColumns.Append(nKey).Append(","); sbValues.Append(AdoHelper.DbParmChar).Append(key).Append(","); } } if (sbColumns.Length > 0 && sbValues.Length > 0) { sbColumns.Remove(sbColumns.ToString().Length - 1, 1); sbValues.Remove(sbValues.ToString().Length - 1, 1); } var sSqls = "INSERT INTO {0}({1}) VALUES({2})"; sSqls = string.Format(sSqls, GetFullTableName(tableInfo), sbColumns.ToString(), sbValues.ToString()); return sSqls; } public static string GetUpdateByObjSql(TableInfo tableInfo, ref Dictionary val, Dictionary wh) { var dic = new Dictionary(); var sBody = new StringBuilder(); var sWheres = new StringBuilder(); foreach (String key in val.Keys) { if (IsCaseColumn(tableInfo, key) || wh.ContainsKey(key)) continue; var nKey = DbKeywords.FormatColumnName(key.Trim()); sBody.Append(nKey).Append("=").Append(AdoHelper.DbParmChar + key).Append(","); dic.Add(key, val[key]); } foreach (String key in wh.Keys) { var nKey = DbKeywords.FormatColumnName(key.Trim()); sWheres.Append(nKey).Append(" = " + AdoHelper.DbParmChar + nKey).Append(" and "); } if (sBody.Length > 0) sBody.Remove(sBody.ToString().Length - 1, 1); if (sWheres.Length > 0) sWheres.Remove(sWheres.ToString().Length - 4, 4); var sSql = "update {0} set {1} where {2}"; sSql = string.Format(sSql, GetFullTableName(tableInfo), sBody, sWheres); val = dic; return sSql; } public static string GetDeleteByObjSql(TableInfo tableInfo, object parms) { var sWheres = new StringBuilder(); var childparms = parms as Dictionary; var pm_wh = new ParamMap(); pm_wh.Paramters(childparms); foreach (String key in childparms.Keys) { var sParmChar = new StringBuilder(); var sKey = DbKeywords.FormatColumnName(key.Trim()); object sVal = null; //sWheres.Append(nKey).Append(" = " + AdoHelper.DbParmChar + nKey).Append(" and "); sParmChar = GetWhsAnd(key, pm_wh, ref sKey, ref sVal); if (sParmChar.Length > 0) { sWheres.Append(sParmChar).Append(" AND "); } } if (sWheres.Length > 0) sWheres.Remove(sWheres.ToString().Length - 4, 4); //string sSqls = "SELECT count(0) FROM {0} WHERE {1}" + System.Environment.NewLine; var sSqls = "delete from {0} where {1}"; sSqls = string.Format(sSqls, GetFullTableName(tableInfo), sWheres); return sSqls; } public static void SetParameters(Map columns, params IDbDataParameter[] parms) { var i = 0; foreach (string key in columns.Keys) { if (!string.IsNullOrEmpty(key.Trim())) { var value = columns[key]; if (value == null) value = DBNull.Value; parms[i].ParameterName = key; parms[i].Value = value; i++; } } } public static bool IsCaseColumn(object attribute, DbOperateType dbOperateType) { if (attribute is SqlSugar.SugarColumn) { var columnAttr = attribute as SqlSugar.SugarColumn; if (columnAttr.IsIgnore) { return true; } if (!columnAttr.IsOnlyIgnoreInsert && dbOperateType == DbOperateType.INSERT) { return true; } } return false; } public static bool IsCaseColumn(PropertyInfo property, DbOperateType dbOperateType) { var isBreak = false; var propertyAttrs = property.GetCustomAttributes(false); foreach (object propertyAttr in propertyAttrs) { if (DbEntityUtils.IsCaseColumn(propertyAttr, dbOperateType)) { isBreak = true; break; } } return isBreak; } public static bool IsCaseColumn(TableInfo tableInfo, string col) { var isBreak = false; do { if (col == "RowIndex" || col == "CreateUser" || col == "CreateDate" || col == tableInfo.Id.Key) { isBreak = true; break; } foreach (IdInfo Id in tableInfo.Ids) { if (Id.Key == col) { isBreak = true; break; } } } while (false); return isBreak; } private static StringBuilder GetWhsAnd(string sKey, ParamMap pm, ref string r_sKey, ref object r_sVal, string dkey = null) { var sParmChar = new StringBuilder(); do { var nKey = sKey.Trim(); var pmKey = nKey; if (dkey != null) { pmKey = dkey.Trim(); } var sValue = pm[pmKey].ToString().Trim(); var sColType = ""; if (nKey.StartsWith("INCLUDNULL_")) { sColType = "includenull"; nKey = nKey.Replace("INCLUDNULL_", ""); } else if (nKey.StartsWith("INCLUDNULLINT_")) { sColType = "includenullint"; nKey = nKey.Replace("INCLUDNULLINT_", ""); } else if (nKey.StartsWith("ISNULL_")) { sColType = "isnull"; nKey = nKey.Replace("ISNULL_", ""); } else if (nKey.StartsWith("ISBLANK_")) { sColType = "isblank"; nKey = nKey.Replace("ISBLANK_", ""); } else if (nKey.StartsWith("CHARINDEX_")) { sColType = "_charindex"; nKey = nKey.Replace("CHARINDEX_", ""); } else if (nKey.StartsWith("_CHARINDEX_")) { sColType = "charindex_"; nKey = nKey.Replace("_CHARINDEX_", ""); } else if (nKey.StartsWith("IN_")) { sColType = "in"; nKey = nKey.Replace("IN_", ""); } if (nKey.IndexOf("+") > -1) { sColType = "multicolumn"; nKey = nKey.Split('+')[0].ToString().Trim(); } nKey = DbKeywords.FormatColumnName(nKey); var sCn = " = "; if (-1 != sValue.IndexOf("|")) { } else if (sValue.StartsWith("==")) { } else if (sValue.StartsWith(">=")) { sCn = " >= "; sValue = sValue.Replace(">=", "").Trim(); sColType = "gt_eq"; } else if (sValue.StartsWith("<=")) { sCn = " <= "; sValue = sValue.Replace("<=", "").Trim(); sColType = "lt_eq"; } else if (sValue.StartsWith(">>=")) { sCn = " >= "; sValue = sValue.Replace(">>=", "").Trim(); sColType = "agt_eq"; } else if (sValue.StartsWith("<<=")) { sCn = " <= "; sValue = sValue.Replace("<<=", "").Trim(); sColType = "alt_eq"; } else if (sValue.StartsWith("<>") || sValue.StartsWith("!=")) { sCn = " <> "; sValue = sValue.Replace("<>", "").Replace("!=", "").Trim(); } else if (sValue.StartsWith(">")) { sCn = " > "; sValue = sValue.Replace(">", "").Trim(); } else if (sValue.StartsWith("<")) { sCn = " < "; sValue = sValue.Replace("<", "").Trim(); } else if (-1 != sValue.IndexOf("..")) { } else if (sValue.StartsWith("%")) { sCn = " LIKE "; } if (sCn == " <> ") { sParmChar.Append(nKey + sCn + AdoHelper.DbParmChar + pmKey); } else if (sColType == "isnull") { sParmChar.Append(nKey + " IS NULL "); } else if (sColType == "isblank") { sParmChar.Append("ISNULL(" + nKey + ",'')" + " = " + AdoHelper.DbParmChar + pmKey); } else if (sValue != "") { switch (sColType) { case "gt_eq": case "lt_eq": sParmChar.Append("(" + nKey + sCn + AdoHelper.DbParmChar + pmKey + " OR ISNULL(" + nKey + ",'')=''" + ")"); break; case "agt_eq": case "alt_eq": sParmChar.Append("(" + nKey + sCn + AdoHelper.DbParmChar + pmKey + ")"); break; case "includenull": sParmChar.Append("ISNULL(" + nKey + ",'')" + sCn + AdoHelper.DbParmChar + pmKey); break; case "includenullint": sParmChar.Append("ISNULL(" + nKey + ",0)" + sCn + AdoHelper.DbParmChar + pmKey); break; case "multicolumn": sParmChar.Append(sKey + sCn + AdoHelper.DbParmChar + pmKey); break; case "_charindex": sParmChar.Append("CHARINDEX(" + AdoHelper.DbParmChar + pmKey + "," + nKey + ") > 0"); break; case "charindex_": sParmChar.Append("CHARINDEX(" + nKey + "," + AdoHelper.DbParmChar + pmKey + ") > 0"); break; case "in": sParmChar.Append(nKey + " IN (" + AdoHelper.DbParmChar + pmKey + ")"); break; default: sParmChar.Append(nKey + sCn + AdoHelper.DbParmChar + pmKey); break; } } r_sKey = pmKey; r_sVal = sValue; } while (false); return sParmChar; } private static StringBuilder GetWhsOrChid(string sKey, ParamMap pm, ref string r_sKey, ref object r_oVal) { var sParmChar = new StringBuilder(); sParmChar.Append("("); do { var nKey = sKey.Trim(); var oVal = pm[sKey]; var saPm = oVal as Object[]; var oValNew = new Object[saPm.Length]; var iIndex = 0; foreach (Object jo in saPm) { var dic = jo as Dictionary; var dicNew = new Dictionary(); var pm_wh = new ParamMap(); pm_wh.Paramters(dic); sParmChar.Append("("); foreach (string key in dic.Keys) { var sKeyNew = ""; object sValNew = ""; var nKeyNew = DbKeywords.FormatColumnName(key.Trim()); var sPmChar = GetWhsAnd(key, pm_wh, ref sKeyNew, ref sValNew); if (sPmChar.Length > 0) { sParmChar.Append(sPmChar + " AND "); } dicNew.Add(sKeyNew, sValNew); } sParmChar.Remove(sParmChar.Length - 4, 4); sParmChar.Append(") OR "); oValNew[iIndex] = dicNew; iIndex++; } sParmChar.Remove(sParmChar.Length - 3, 3); sParmChar.Append(")"); r_sKey = nKey; r_oVal = oValNew; } while (false); return sParmChar; } private static StringBuilder GetWhsAndChid(string sKey, ParamMap pm, ref string r_sKey, ref object r_oVal) { var sParmChar = new StringBuilder(); sParmChar.Append("("); do { var nKey = sKey.Trim(); var oVal = pm[sKey]; var saPm = oVal as Object[]; var oValNew = new Object[saPm.Length]; var iIndex = 0; foreach (Object jo in saPm) { var dic = jo as Dictionary; var dicNew = new Dictionary(); var pm_wh = new ParamMap(); var key = dic["key"].ToString().Trim(); var name = dic["name"].ToString().Trim(); var value = dic["value"]; pm_wh.Add(name, value); var sKeyNew = ""; object sValNew = ""; var nKeyNew = DbKeywords.FormatColumnName(key); var sPmChar = GetWhsAnd(key, pm_wh, ref sKeyNew, ref sValNew, name); dicNew.Add(sKeyNew, sValNew); if (sPmChar.Length == 0) { continue; } sParmChar.Append(sPmChar + " AND "); oValNew[iIndex] = dicNew; iIndex++; } if (sParmChar.Length == 1) { sParmChar = new StringBuilder(); break; } sParmChar.Remove(sParmChar.Length - 4, 4); sParmChar.Append(")"); r_sKey = nKey; r_oVal = oValNew; } while (false); return sParmChar; } } }