none
Campos Nulos en sql server RRS feed

  • Pregunta

  • Hola foro 

    tengo una pequeña consulta estoy utilizando sql server  para almacenar datos que envio desde una form de vb .net pero cuando quiero grabar el campo cliente que es opcional si graba codigo o vacio(NULL) me genera un error la conversion de tipo '' en el tipo 'integer' no es valida  como puedo solucionar ese error?

    lunes, 27 de julio de 2015 22:46

Respuestas

  • Hola Formulador,

    Si el campo es opcional en base de datos y el valor que pasas como argumento del parámetro es vacío entonces debes enviar DBNull.Value.

    if (txtNombre.Text == "")
    {
      cmd.Parameters.AddWithValue("@Nombre", DBNull.Value)
    }
    else
    {
      cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text)
    }

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ
    lunes, 27 de julio de 2015 23:04
  • hola

    pero entiendo que el campo es numerico, esta claro que no puedes guardar un string vacio porque es logico que fallara la conversion

    ahora bien, cuando invocas la query para almacenar usas parametros ? porque si estas concatenando en un string es una pesima practica

    la estructura de tu codigo deberia ser simil a esto

    using (SqlConnection conn = new SqlConnection("<connection string>"))  
    {      
    	conn.Open();       
    	
    	string query = "INSERT INTO NombreTabla (campo1, campo2) VALUES (@param1, @param2)";      
    	SqlCommand cmd = new SqlCommand(query, conn);      
    	cmd.Parameters.AddWithValue("@param1", Convert.ToString(TextBox1.Text));
    	cmd.Parameters.AddWithValue("@param2", Convert.ToInt32(Textbox2.Text));    
    	
    	cmd.ExecuteNonQuery();   
    }

    usando la coleccion Parameters, entonces si puedes aplicar lo comentado por Williams

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 28 de julio de 2015 3:45

Todas las respuestas

  • es porque tu campo es el tipo entero y no puedes mandarle valor del tipo string o texto, ni dejarlo en nulo, pero hay varios soluciones para esto como dejarle un valor predeterminado para que no te marque error. La otra opcion es que al momento de mandar tu parametro le mandas uno por defecto, como un cero, pero se que existen mas soluciones.

    Necesito almacenar null campos numericos

    • Editado FranNovato lunes, 27 de julio de 2015 22:58
    lunes, 27 de julio de 2015 22:53
  • recibe el parametro como nulo en el procedimiento que almacena los datos, y si es nulo en tu proyecto no envies el parametro.
    lunes, 27 de julio de 2015 22:59
  • Hola Formulador,

    Si el campo es opcional en base de datos y el valor que pasas como argumento del parámetro es vacío entonces debes enviar DBNull.Value.

    if (txtNombre.Text == "")
    {
      cmd.Parameters.AddWithValue("@Nombre", DBNull.Value)
    }
    else
    {
      cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text)
    }

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ
    lunes, 27 de julio de 2015 23:04
  • hola

    pero entiendo que el campo es numerico, esta claro que no puedes guardar un string vacio porque es logico que fallara la conversion

    ahora bien, cuando invocas la query para almacenar usas parametros ? porque si estas concatenando en un string es una pesima practica

    la estructura de tu codigo deberia ser simil a esto

    using (SqlConnection conn = new SqlConnection("<connection string>"))  
    {      
    	conn.Open();       
    	
    	string query = "INSERT INTO NombreTabla (campo1, campo2) VALUES (@param1, @param2)";      
    	SqlCommand cmd = new SqlCommand(query, conn);      
    	cmd.Parameters.AddWithValue("@param1", Convert.ToString(TextBox1.Text));
    	cmd.Parameters.AddWithValue("@param2", Convert.ToInt32(Textbox2.Text));    
    	
    	cmd.ExecuteNonQuery();   
    }

    usando la coleccion Parameters, entonces si puedes aplicar lo comentado por Williams

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 28 de julio de 2015 3:45