コード例 #1
0
        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);
        }
コード例 #2
0
 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);
 });
コード例 #3
0
ファイル: OscarProvider.cs プロジェクト: zyj0021/SqlSugar
        /// <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);
        }