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; }
//通过配置和参数创建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); }
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); }
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); }