none
Valor nullable RRS feed

  • Pregunta

  • Buenas, tengo un modelo de datos representado de esta forma , donde declaro el campo Altura como nullable , luego en la BD tengo la misma representación , dicha tabla con este campo Altura que permite null.

       class Montajes
        {
            public int id;
            ....
            public decimal? Adicion;
            public decimal? Altura;
            public decimal? DNP;
            
            public Montajes() { }
    
        }

    Luego tengo un método tal como este que recibe todos los parametros

            public static int Agregar(Montajes pMontajes)
            {
                int id = 0;
                using (SqlConnection Conn = Conexion.obtenerConexion())
                {
                        SqlCommand Comando1 = new SqlCommand("insert into  Montajes (id,tiendaMontaje,codigoVenta,tiendaVenta,liniaVenta,numMontaje,ojo,diametro,eje,Cilindro," +
                                         "Esfera,Adicion,Altura,DNP) values " +
                                         "(@id,@tiendaMontaje,@codigoVenta,@tiendaVenta,@liniaVenta,@numMontaje,@ojo,@diametro,@eje,@Cilindro,@Esfera,@Adicion,@Altura,@DNP);", Conn);
    
     
    
                        Comando1.Parameters.AddWithValue("@id", pMontajes.id);
    ...
    ...                     
                        Comando1.Parameters.AddWithValue("@diametro", pMontajes.Diametro);
                        Comando1.Parameters.AddWithValue("@eje", pMontajes.Eje);
                        
    ....                    Comando1.Parameters.AddWithValue("@Altura", pMontajes.Altura);
                        Comando1.Parameters.AddWithValue("@DNP", pMontajes.DNP);
    
                        id = Comando1.ExecuteNonQuery();
                }
    
                return id;
            }

    Y lo invoco de la siguiente manera

        Montajes.Diametro = 0;
                                Montajes.Eje = 0;
                                Montajes.Cilindro = 0;
                                 Montajes.DNP = 0;
                                 Montajes.altura = null;
                            MontajesBD.Agregar(Montajes);

    Como veis al valor altura le paso un null , pues entonces me da error en el INSERT (2º TROZO DE CÓDIGO) diciendo que 

    Excepción no controlada del tipo 'System.Data.SqlClient.SqlException' en System.Data.dll

    Información adicional: La consulta con parámetros '(@id int,@tiendaMontaje int,@codigoVenta int,@tiendaVenta int,@l' espera el parámetro '@Altura', que no se ha proporcionado.

    Gracias.


    • Editado golfgti6 martes, 13 de enero de 2015 21:19
    martes, 13 de enero de 2015 21:19

Respuestas

Todas las respuestas

  • Utiliza DBNull.Value:

    Comando1.Parameters.AddWithValue("@Altura", pMontajes.Altura ?? DBNull.Value);
    

    • Propuesto como respuesta Sergio Parra martes, 13 de enero de 2015 21:29
    • Marcado como respuesta golfgti6 martes, 13 de enero de 2015 21:33
    martes, 13 de enero de 2015 21:24
  • Utiliza DBNull.Value:

    Comando1.Parameters.AddWithValue("@Altura", pMontajes.Altura ?? DBNull.Value);

    me dice lo siguiente

    Error 28 El operador '??' no se puede aplicar a operandos del tipo 'decimal?' y 'System.DBNull'
    martes, 13 de enero de 2015 21:28
  • Hola, intenta hacer lo siguiente:

    Comando1.Parameters.AddWithValue("@Altura", pMontajes.Altura ?? (object)DBNull.Value);

    • Marcado como respuesta golfgti6 martes, 13 de enero de 2015 21:36
    martes, 13 de enero de 2015 21:32
  • Hola, intenta hacer lo siguiente:

    Comando1.Parameters.AddWithValue("@Altura", pMontajes.Altura ?? (object)DBNull.Value);

    Muchas gracias ahora si !!!

    1000 gracias

    martes, 13 de enero de 2015 21:36
  • Perdón:

    Comando1.Parameters.AddWithValue("@Altura", pMontajes.Altura==null ? DBNull.Value : pMontajes.Altura);

    • Marcado como respuesta golfgti6 miércoles, 14 de enero de 2015 18:25
    martes, 13 de enero de 2015 21:42