Esempio n. 1
0
 private string BuildParameter(IDbExecuteContext ctx, IParameterSetting parameter, string parameterName, object parameterValue, string commandText, DbCommand cmd)
 {
     var objectService = ObjectService.Current;
     var typeName = objectService.GetTypeName(parameter.ParameterTypeName);
     var parameterType = TypeHelper.CreateType(typeName, true);
     if (parameterValue != null) { //判断类型是否匹配
         var parameterRealType = parameterValue.GetType();
         if (parameterRealType.IsEnum && parameterType == typeof (int)) {} else if (parameterRealType.IsValueType) {} else if (!parameterType.IsInstanceOfType(parameterValue)) {
             throw new DataException(string.Format("参数 {0} 类型不匹配", parameter.Name));
         }
     } else { //获取缺省值
         parameterValue = parameter.GetDefaultValue(parameterType);
     }
     if (parameter.IsInline) {
         if (parameterValue != null) {
             commandText = commandText.Replace(parameterName, parameterValue.ToString());
         }
     } else {
         if (parameterValue != null && parameterValue is IObjectWrap) { //传出的参数?
             parameterValue = ((IObjectWrap) parameterValue).Value;
         }
         this.BuildParameter(ctx, cmd, parameter, parameterName, parameterValue);
     }
     return commandText;
 }
Esempio n. 2
0
        //通过配置和参数创建SQL参数
        protected virtual void BuildParameter(IDbExecuteContext ctx, DbCommand cmd, IParameterSetting parameter, string parameterName, object parameterValue)
        {
            var dbParameter = cmd.CreateParameter();

            dbParameter.ParameterName = parameterName;            //这里的参数名已经有@前缀了
            var isNullable = parameter.IsNullable;

            if (isNullable && parameterValue == null)
            {
                parameterValue = DBNull.Value;
            }
            dbParameter.Value = parameterValue;
            if (!string.IsNullOrEmpty(parameter.DbTypeName))              //显示指定了参数类型
            {
                ctx.DataStorage.SetDbType(dbParameter, parameter.DbTypeName);
            }
            else                //未指定则从类型值里推断参数类型
            {
                ctx.DataStorage.SetDbTypeFromValue(dbParameter, parameterValue);
            }

            dbParameter.Direction  = parameter.Direction;
            dbParameter.IsNullable = parameter.IsNullable;
            dbParameter.Size       = parameter.Size;
            ((IDbDataParameter)dbParameter).Scale     = parameter.Scale;
            ((IDbDataParameter)dbParameter).Precision = parameter.Precision;
            cmd.Parameters.Add(dbParameter);
        }
Esempio n. 3
0
        private string BuildParameter(IDbExecuteContext ctx, IParameterSetting parameter, string parameterName, object parameterValue, string commandText, DbCommand cmd)
        {
            Type parameterType = null;

            if (!string.IsNullOrEmpty(parameter.ParameterTypeName))
            {
                var objectService = ObjectService.Current;
                parameterType = objectService.GetOrCreateType(parameter.ParameterTypeName);
            }
            if (parameterValue != null)               //判断类型是否匹配
            {
                var parameterRealType = parameterValue.GetType();
                if (parameterRealType.IsEnum && parameterType == typeof(int))
                {
                }
                else if (parameterRealType.IsValueType)
                {
                }
                else if (parameterType != null && !parameterType.IsInstanceOfType(parameterValue))
                {
                    throw new DataException($"参数 {parameter.Name} 类型不匹配");
                }
            }
            else                 //获取缺省值
            {
                parameterValue = parameter.GetDefaultValue(parameterType);
            }
            if (parameter.IsInline)
            {
                if (parameterValue != null)
                {
                    commandText = commandText.Replace(parameterName, parameterValue.ToString());
                }
            }
            else
            {
                if (parameterValue is IObjectWrap)                   //传出的参数?
                {
                    parameterValue = ((IObjectWrap)parameterValue).Value;
                }
                this.BuildParameter(ctx, cmd, parameter, parameterName, parameterValue);
            }
            return(commandText);
        }
Esempio n. 4
0
 protected virtual void BuildParameter(IDbExecuteContext ctx, DbCommand cmd, IParameterSetting parameter, string parameterName, object parameterValue)
 {
     var dbParameter = cmd.CreateParameter();
     dbParameter.ParameterName = parameterName;
     if(!string.IsNullOrEmpty(parameter.DbTypeName)) {
         ctx.DataStorage.SetDbType(dbParameter, parameter.DbTypeName);
     }
     var isNullable = parameter.IsNullable;
     if(isNullable && parameterValue == null) {
         parameterValue = DBNull.Value;
     }
     dbParameter.Direction = parameter.Direction;
     dbParameter.IsNullable = parameter.IsNullable;
     dbParameter.Size = parameter.Size;
     ((IDbDataParameter)dbParameter).Scale = parameter.Scale;
     ((IDbDataParameter)dbParameter).Precision = parameter.Precision;
     dbParameter.Value = parameterValue;
     cmd.Parameters.Add(dbParameter);
 }