private void BuildColumnParameter(DbColumnAttribute column, MySqlCommand cmd, EntityType entity) { if (column.DbType == System.Data.DbType.String && column.Property.PropertyType == typeof(List <int>)) { var o = column.Property.GetValue(entity); if (null == o) { column.BuildParameter(cmd).Value = ""; } else { column.BuildParameter(cmd).Value = string.Join(",", ((List <int>)o).Select(item => item.ToString()).ToArray()); } } else { object value = column.Property.GetValue(entity); if (null == value && column.IsOptional) { switch (column.DbType) { case System.Data.DbType.String: value = ""; break; case System.Data.DbType.Currency: value = 0.0m; break; case System.Data.DbType.Int32: value = 0; break; } } column.BuildParameter(cmd).Value = value; } }
private void BuildLikeParameter(MySqlCommand cmd, StringBuilder sqlBuilder, DbColumnAttribute column, object value) { if (column.DbType == System.Data.DbType.String) { var s = value as string; if (null != s)// && s.Contains("|")) { string[] values = s.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray(); if (values.Length != 0) { sqlBuilder.Append("("); try { string paramName = string.Format("@param__{0}", cmd.Parameters.Count);// + ConvertToParamName(values[0]); BuildFuzzyOrLiteralCommand(sqlBuilder, cmd, paramName, column, values[0]); for (int i = 1; i < values.Length; i++) { sqlBuilder.Append(" OR "); paramName = string.Format("@param__{0}", cmd.Parameters.Count);//paramName = "@" + ConvertToParamName(values[i]); BuildFuzzyOrLiteralCommand(sqlBuilder, cmd, paramName, column, values[i]); } } finally { sqlBuilder.Append(")"); } return; } } } else if (column.DbType == System.Data.DbType.Currency) { //todo: it will be a string if it is separated by a character var s = value as string; if (null != s) { string[] minMax = s.Split(new char[] { '-', ':', '|' }, StringSplitOptions.RemoveEmptyEntries); if (minMax.Length == 2) { decimal min = decimal.Parse(minMax[0], System.Globalization.NumberStyles.Currency); decimal max = decimal.Parse(minMax[1], System.Globalization.NumberStyles.Currency); sqlBuilder.AppendFormat("(@Min{0} <= {0} AND {0} <= @Max{0})", column.ColumnName); cmd.Parameters.Add("@Min" + column.ColumnName, column.DbType).Value = min; cmd.Parameters.Add("@Max" + column.ColumnName, column.DbType).Value = max; return; } } } sqlBuilder.AppendFormat("{0} = @{0}", column.ColumnName); column.BuildParameter(cmd).Value = value; }