none
Error: El valor no puede ser nulo. Nombre del parámetro key RRS feed

  • Pregunta

  • Hola, estoy realizando un proyecto en VS 2015 con conexión a BD Oracle. En el tengo que generar un numero del 1 al 9 para las ordenes de compra que se generan , pero este num no debe ser dado en la bd como una secuencia,ya que en la tabla llegaran las de todas las tiendas de la zona, por eso se debe generar desde el sistema.El numero lo obtengo mediante un switch y realice una consulta en la cual me mostrará el valor del último registro.

    Pero al momento ejecutar me sale: "El valor no puede ser nulo. Nombre del parametro key".

     public void Numero_Preop()
            {
                Cursor.Current = Cursors.WaitCursor;
                try
                {
                
                   var conexion = new OracleConnection(cl_Conexion.GetConexion());
                    conexion.Open();
    
                    OracleCommand cmd = new OracleCommand("SELECT * FROM (SELECT NUM_PREOP FROM SICO_PREOPERACIONES WHERE CLAVE_SUCURSAL = " + cve_suc + "ORDER BY FECHA_CREA DESC) WHERE ROWNUM = 1", conexion);
                    OracleDataReader reader = cmd.ExecuteReader();
    
                    while (reader.Read())
                    {
                        preop = reader.GetString(0);
                        //  MessageBox.Show(preop.ToString());
                    }
    
                    conexion.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ocurrió un error al generar el numero: " + ex.Message, "Generar folio", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                Cursor.Current = Cursors.Default;
                num_preop = Convert.ToInt32(preop);
                //// MessageBox.Show(num_preop.ToString());
                ///*
                //preop = (num_preop).ToString();
    
                //label8.Text = preop;
                //*/
            }



    • Editado GabrielaGonz miércoles, 11 de julio de 2018 15:46
    miércoles, 11 de julio de 2018 15:44

Todas las respuestas

  • Hola Gabriela, buenos días, dos cosas:

    1. Para que usas un reader si solo necesitas un valor? en la consulta simplemente trae el valor que necesitas y lo guardas en la variable directamente, para eso utiliza el ExecuteScalar.

    2. el mensaje que te sale es porque la consulta te está devolviendo nulo, y al hacer esto:

    preop = reader.GetString(0);

    te arroja el error, cuando usas reader debes asegurarte que tu consulta no devuelva valores nulos.

    Saludos.

    miércoles, 11 de julio de 2018 15:58
  • hola

    deberias evaluar si el valor puede ser convertido a string usando

    while (reader.Read()) {

    if(reader[0] != DbNull.Value) preop = reader.GetString(0); }

    basicamente validas si el campo no esta en nulo, verifica si este permite null en la tabla de oracle

    Ademas podrias ponerle nombre a los campos usando

    string query = @"SELECT NUM_PREOP FROM 
    					(SELECT NUM_PREOP 
    						FROM SICO_PREOPERACIONES 
    						WHERE CLAVE_SUCURSAL = :suc ORDER BY FECHA_CREA DESC)
    				WHERE ROWNUM = 1";
    
    OracleCommand cmd = new OracleCommand(query, conexion);
    cmd.Parameters.Add("suc", OracleDbType.Int32).Value = cve_suc
    
    OracleDataReader reader = cmd.ExecuteReader();
    
    while (reader.Read())
    {
    	if(reader["NUM_PREOP"] != DBNull.Value)
    		preop = reader["NUM_PREOP"].ToString();
    	
    }

    si puedes usa parametros

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 11 de julio de 2018 16:08