none
El valor de parámetro está fuera del intervalo. RRS feed

  • 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.

    martes, 8 de marzo de 2016 16:20

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
    martes, 8 de marzo de 2016 22:46

Todas las respuestas

  • Podria ser un problema de Localizacion?

    intenta con 177.00 (es decir punto en lugar de coma)

    Probablemente ese sea el problema.

    Saludos

    martes, 8 de marzo de 2016 21:50
  • 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

    martes, 8 de marzo de 2016 22:20
  • 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

    martes, 8 de marzo de 2016 22:21
  • 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
    martes, 8 de marzo de 2016 22:46