none
Error al convertir el valor del parámetro de String a Int32. RRS feed

  • Pregunta

  • Hola 
    Tengo un problema con este error, pero no he podido resolverlo, es  una insercion a una tabla a traves de un procedimiento almacenado
    Este es el código:


    comando.CommandText = "basededatos.dbo.Insertar1522"
                comando.CommandType = CommandType.StoredProcedure
                comando.Parameters.Add("@Nit", SqlDbType.VarChar, 15).Value = "a"
                comando.Parameters.Add("@Cod", SqlDbType.VarChar, 20).Value = "a"
                comando.Parameters.Add("@Especialidad", SqlDbType.VarChar, 10).Value = "v"
                comando.Parameters.Add("@Departamento", SqlDbType.VarChar, 2).Value = "a"
                comando.Parameters.Add("@Municipio", SqlDbType.VarChar, 3).Value = "v"
                comando.Parameters.Add("@TotalCitas", SqlDbType.Int).Value = (Me.TxtAsignacionCita.Text.Trim)
                comando.Parameters.Add("@SumSolicitud", SqlDbType.Int).Value = (Me.TxtSolicitudCita.Text.Trim)
                comando.Parameters.Add("@PromAsignacion", SqlDbType.Int).Value = (Me.TxtPromedioAsignacion.Text.Trim)
                comando.Parameters.Add("@MinimoDias", SqlDbType.Int).Value = (Me.TxtMinDias.Text.Trim)
                comando.Parameters.Add("@MaximoDias", SqlDbType.Int).Value = (Me.TxtMaxDias.Text.Trim)
                comando.Parameters.Add("@HorasDisponibles", SqlDbType.Int).Value = (Me.TxtHorasDisp.Text.Trim)
                comando.Parameters.Add("@SumSolicitud", SqlDbType.Int).Value = (Me.TxtTotalCitas.Text.Trim)
                'Comando.Parameters.Add("@SumSolicitud", SqlDbType.Float).Value = FormatoFecha(txtFechaFicha.DateTextFromValue.ToString())


                comando.ExecuteNonQuery()
                comando.Parameters.Clear()
            Catch ex As Exception
                miutilmsg1.alerta(Err.Description.Trim, Me, False)
            End Try

        End Sub

    ya lo hice de estas manera con cada uno y no funciona 

    comando.Parameters.Add("@MaximoDias", SqlDbType.Int).Value = Convert.toint32(Me.TxtMaxDias.Text.Trim)

    y el procedimiento almacenado es...

    ALTER Procedure Insertar1522

     @Nit varchar(15),
     @IPS VARCHAR(20),
     @Especialidad VARCHAR(10),
     @Departamento VARCHAR(2),
     @Municipio VARCHAR(3),
     @TotalCitasAsig INT,
     @SumSolicitudCita INT,
     @SumAsignacionCita INT,
     @PromSolicitudCita INT,
     @PromAsignacionCita INT,
     @MinimoDias INT,
     @MaximoDias INT,
     @HorasDisponibles int

    Gracias de Antemano

    lunes, 30 de julio de 2018 21:47

Todas las respuestas

  • Buenos días

    En los campos con valores numéricos, porqué no utilizas un control NumericUpDown y así te aseguras que los valores son numéricos?

    Saludos

    martes, 21 de agosto de 2018 9:03
  • La forma en la que lo has escrito tiene que funcionar... suponiendo que, efectivamente, el TxtMaxDias.Text contiene un número válido, de lo contrario es perfectamente normal que te dé un error.

    Cerciórate de que validas el valor introducido por el usuario antes de ejecutar el código que llama al procedimiento almacenado. Si crees que está validado, y sin embargo produce un error, pon un punto de ruptura en esa línea y examina con el debugger el valor que te llegó en TxtMaxDias.Text. Con seguridad comprobarás que no es un número válido. NOTA: Recuerda que dejarlo vacío NO se considera un número válido; el Convert.ToInt32 explícito o implícito dará un error si el campo está vacío (no convierte el vacío en un cero como mucha gente cree).

    martes, 21 de agosto de 2018 9:53