Principales respuestas
El valor de parámetro está fuera del intervalo.

Pregunta
-
Buen día comunidad, acudo a ustedes por alguna ayuda ya que he agotado busquedas y revisiones propias en tratar de identificar el posible error que no he podido identificar.
hay un desarrollo de un sitio web que funciona en red LAN Interna de una empresa. El sitio esta desarolloado con entity Framework y membership.
hay una tabla llamada disponibilidadOcupacion, la cual es de solo consulta como su nombre lo indica (Disponibilidad de tiempos y ocupación de estos ) sobre tareas asignadas.
cuando intento consultar un usuario X su tiempo disponible, me sale el siguiente error:
El valor de parámetro '177,00' está fuera del intervalo. Línea 557: { Línea 558: _DB.AddToDisponibilidadOcupacion(Dispo); Línea 559: _DB.SaveChanges(); Línea 560: } Línea 561: ViewBag.VistaUser = UserId; [ArgumentException: El valor de parámetro '177,00' está fuera del intervalo.] System.Data.SqlClient.TdsParser.TdsExecuteRPC(SqlCommand cmd, _SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc, Boolean sync, TaskCompletionSource`1 completion, Int32 startRpc, Int32 startParam) +7688 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2064 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +375 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +161 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +12 System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) +215 System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +256 [UpdateException: Se produjo un error mientras se actualizaban las entradas. Vea la excepción interna para obtener detalles.] System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +451 System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) +141 System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) +570 System.Data.Objects.ObjectContext.SaveChanges() +17 Proyecto_RAI.Controllers.RequerimientoController.ListaDisponiOcup(Int32 UserId) in C:\Users\guigilmo\Documents\Visual Studio 2010\Projects\Proyecto_RAI\Proyecto_RAI\Controllers\RequerimientoController.cs:559 lambda_method(Closure , ControllerBase , Object[] ) +161
estos son los parametros de entrada desde el controlador:
if (UserId != 0) { var LisHoras = (from R in _DB.Usuarios let D = _DB.Requerimiento.Where(f => f.Estado_Req >= 2 && f.Estado_Req <= 3 && f.UserId == UserId).Select(h => h.Horas_Proyec) select new { TotalHoras = D.Sum() }).FirstOrDefault(); Lis_Horas = Convert.ToDecimal(LisHoras.TotalHoras); var LisTAcum = (from R in _DB.Requerimiento let M = _DB.Movimientos_Requerimientos.Where(U => U.Id_Req == R.ID_Req && R.Estado_Req >= 2 && R.Estado_Req <= 3 && U.UserId == UserId).Select(A => A.Tiempo_Acum) select new { T_Dedi = M.Max() }).Sum(s => s.T_Dedi); LisT_Acum = Convert.ToDecimal(LisTAcum);//se transforma en decimal a el teclado en ingles if (LisHoras.TotalHoras != null) { Total_Horas = Lis_Horas - LisT_Acum;//se totaliza la proyeccion de horas reales } else { Total_Horas = 0; } } else { var LisHoras = (from R in _DB.Requerimiento where R.Estado_Req >= 2 && R.Estado_Req <= 3 group R by new { R.ID_Req, R.UserId } into grupo select grupo.Sum(d => d.Horas_Proyec).Value); Lis_Horas = Convert.ToDecimal(LisHoras.Sum()); var LisTAcum = (from R in _DB.Movimientos_Requerimientos where R.Requerimiento.Estado_Req >= 2 && R.Requerimiento.Estado_Req <= 3 group R by new { R.UserId } into grup select grup.Max(s => s.Tiempo_Acum)).Sum(); LisT_Acum = Convert.ToDecimal(LisTAcum);//se transforma en decimal a el teclado en ingles if (LisHoras != null) { Total_Horas = Lis_Horas - LisT_Acum;//se totaliza la proyeccion de horas reales } else { Total_Horas = 0; } } DateTime inicio = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); Dispo.Tot_HProyectadas = Lis_Horas; Dispo.Tot_HAcum = LisT_Acum; Dispo.Total_Horas = Total_Horas; Dispo.Dia = DateTime.Now.ToString("dd"); Dispo.Disponibilidad = 1; Dispo.Ocupacion = Convert.ToInt32(Total_Horas); Dispo.Usuario = UserId.ToString(); Dispo.Fecha = inicio; if (ModelState.IsValid) { _DB.AddToDisponibilidadOcupacion(Dispo); _DB.SaveChanges(); } ViewBag.VistaUser = UserId; ViewBag.ListUser = _DB.Usuarios.ToList(); return PartialView("partials/_ListaDispOcu", DispOcu);
de acuerdo a lo anterior, voy a la definición de la variable Total_Horas, desde el Modelo, y esta definida asi:
[EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = true)] [DataMemberAttribute()] public Nullable<global::System.Decimal> Total_Horas { get { return _Total_Horas; } set { OnTotal_HorasChanging(value); ReportPropertyChanging("Total_Horas"); _Total_Horas = StructuralObject.SetValidValue(value); ReportPropertyChanged("Total_Horas"); OnTotal_HorasChanged(); } } private Nullable<global::System.Decimal> _Total_Horas; partial void OnTotal_HorasChanging(Nullable<global::System.Decimal> value); partial void OnTotal_HorasChanged();
Ya que es aquí que me salta el error. Desde la base de datos este parámetro esta definido como (Decimal 6,4)
he vlidado con break point que valores estan pasando, y son valores bien calculados, pero al momento de hacer la inserción el error persiste sin poder entender porque surge si todos los parametros están definidos como debe de ser.
De antemano gracias por su atención y agradezco cualquier ayuda.
Respuestas
-
Me respondo, procedí a cambiar el ámbito de parámetros en la base de datos, sobre la tabla DisponibilidadOcupacion.
cambiando sobre el tipo de datos a no permitir valores nulos, ya que antes estaba al contrario. esta modificación permite ingresar los valores sin presentar volcado de intervalo que era lo que sucedía.
Gracias.
- Marcado como respuesta Y1Y02 martes, 8 de marzo de 2016 22:53
Todas las respuestas
-
-
cuando en base de datos estableces un tipo DECIMAL(6,4) eso significa que vas a tener un numero de 6 posiciones, 4 de ellas decimales. O sea que el valor máximo permitido en dicho campo seria 99.9999
el valor 177.00 como ves no es permitido.
cambia el tipo de dato en tu bbdd por ejemplo a DECIMAL(7,4) por lo menos
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos
-
mira la definición de lo que te digo en
https://msdn.microsoft.com/es-es/library/ms187746%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos
-
Me respondo, procedí a cambiar el ámbito de parámetros en la base de datos, sobre la tabla DisponibilidadOcupacion.
cambiando sobre el tipo de datos a no permitir valores nulos, ya que antes estaba al contrario. esta modificación permite ingresar los valores sin presentar volcado de intervalo que era lo que sucedía.
Gracias.
- Marcado como respuesta Y1Y02 martes, 8 de marzo de 2016 22:53