public override DbParameter AppendParamter(List <DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value) { if (string.IsNullOrEmpty(parameterName)) { parameterName = $"p_{_params?.Count}"; } if (value != null) { value = getParamterValue(type, value); } var ret = new OscarParameter { ParameterName = QuoteParamterName(parameterName), Value = value }; //if (value.GetType().IsEnum || value.GetType().GenericTypeArguments.FirstOrDefault()?.IsEnum == true) { // ret.DataTypeName = ""; //} else { var tp = _orm.CodeFirst.GetDbInfo(type)?.type; if (tp != null) { ret.OscarDbType = (OscarDbType)tp.Value; } if (col != null) { var dbtype = (OscarDbType)_orm.DbFirst.GetDbType(new DatabaseModel.DbColumnInfo { DbTypeText = col.DbTypeText }); if (dbtype != OscarDbType.Oidvector) { ret.OscarDbType = dbtype; if (col.DbSize != 0) { ret.Size = col.DbSize; } if (col.DbPrecision != 0) { ret.Precision = col.DbPrecision; } if (col.DbScale != 0) { ret.Scale = col.DbScale; } } } //} _params?.Add(ret); return(ret); }
public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => Utils.GetDbParamtersByObject <OscarParameter>(sql, obj, "@", (name, type, value) => { if (value != null) { value = getParamterValue(type, value); } var ret = new OscarParameter { ParameterName = $"@{name}", Value = value }; //if (value.GetType().IsEnum || value.GetType().GenericTypeArguments.FirstOrDefault()?.IsEnum == true) { // ret.DataTypeName = ""; //} else { var tp = _orm.CodeFirst.GetDbInfo(type)?.type; if (tp != null) { ret.OscarDbType = (OscarDbType)tp.Value; } //} return(ret); });
/// <summary> /// if mysql return MySqlParameter[] pars /// if sqlerver return SqlParameter[] pars ... /// </summary> /// <param name="parameters"></param> /// <returns></returns> public override IDataParameter[] ToIDbDataParameter(params SugarParameter[] parameters) { if (parameters == null || parameters.Length == 0) { return(null); } OscarParameter[] result = new OscarParameter[parameters.Length]; int index = 0; var isVarchar = this.Context.IsVarchar(); foreach (var parameter in parameters) { if (parameter.Value == null) { parameter.Value = DBNull.Value; } var sqlParameter = new OscarParameter(); sqlParameter.ParameterName = parameter.ParameterName; sqlParameter.Size = parameter.Size; sqlParameter.Value = parameter.Value; sqlParameter.DbType = parameter.DbType; sqlParameter.Direction = parameter.Direction; if (parameter.IsJson) { sqlParameter.OscarDbType = OscarDbType.Text; } if (parameter.IsArray) { // sqlParameter.Value = this.Context.Utilities.SerializeObject(sqlParameter.Value); var type = sqlParameter.Value.GetType(); if (ArrayMapping.ContainsKey(type)) { sqlParameter.OscarDbType = ArrayMapping[type] | OscarDbType.Array; } else { Check.Exception(true, sqlParameter.Value.GetType().Name + " No Support"); } } if (sqlParameter.Direction == 0) { sqlParameter.Direction = ParameterDirection.Input; } result[index] = sqlParameter; if (sqlParameter.Direction.IsIn(ParameterDirection.Output, ParameterDirection.InputOutput, ParameterDirection.ReturnValue)) { if (this.OutputParameters == null) { this.OutputParameters = new List <IDataParameter>(); } this.OutputParameters.RemoveAll(it => it.ParameterName == sqlParameter.ParameterName); this.OutputParameters.Add(sqlParameter); } if (isVarchar && sqlParameter.DbType == System.Data.DbType.String) { sqlParameter.DbType = System.Data.DbType.AnsiString; } ++index; } return(result); }