none
Traer diferentes tipos de valores(int, decimal) de un procedimento almacenado a c# RRS feed

  • Pregunta

  • Tengo un procedimiento almacenado donde poseo 3 parámetros de salida, 1 parámetro es tipo Int y los otros 2 tipo Decimal,el cual me los traigo del mismo procedimiento, pero a la hora de pasarlo a C# para mostrar los parámetros, no se como podría hacer la función ya que siempre lo he hecho con un solo tipo de dato, ya sea int o string, nunca he "rescatado" de un mismo procedimiento 2 tipos diferentes de datos. ¿Cómo podrá hacerlo? siempre he hecho es así:

    public string traerValor()
    {
     using (var conexionN = new SqlConnection(conexionBD.ConexionBasesD()))
                {
                   comando.Connection = conexionN;
                        comando.CommandText = "sp_EliminarProductos";
                        comando.CommandType = CommandType.StoredProcedure;
                        comando.Parameters.AddWithValue("@idProducto", parametros.Idproducto);
                        comando.Parameters.AddWithValue("@estado", parametros.Estado);
                        SqlParameter param = new SqlParameter("@mensaje", SqlDbType.VarChar, 67);
                        param.Direction = ParameterDirection.Output;
                        comando.Parameters.Add(param);
                        comando.ExecuteNonQuery();
                        string mensaje = "";                  
                        return mensaje = Convert.ToString(comando.Parameters["@mensaje"].Value);
                 }
    }
    Si es un string que hay que traer coloco public string, si es un int, public int, pero nunca me he traído 2 de tipo diferente.

    PD: el código que muestro es un ejemplo de como me he traído parámetros de salida tipo string.
    • Editado NathalyChR lunes, 24 de agosto de 2020 20:12
    lunes, 24 de agosto de 2020 20:11

Respuestas

  • hola

    Tienes que crear una class

    public class Result{
    
         public string mensaje {get;set;}
         public int param1 {get;set;}
         public int param2 {get;set;}
    
    }

    entonces usarias

    public Result traerValor()
    {
    	var result = new Result();
    
    	using (var conexionN = new SqlConnection(conexionBD.ConexionBasesD()))
    	{
    		var comando = new SqlCommand("NombreProcedure", conexionN);
    		//resto codigo
    		
    		comando.ExecuteNonQuery();
    		
    		            
    		result.mensaje = Convert.ToString(comando.Parameters["@mensaje"].Value);
    		result.param1 = Convert.ToInt32(comando.Parameters["@param1"].Value);
    		result.param2 = Convert.ToInt32(comando.Parameters["@param2"].Value);
    	}
    	
    	return result;
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 24 de agosto de 2020 20:17

Todas las respuestas

  • hola

    Tienes que crear una class

    public class Result{
    
         public string mensaje {get;set;}
         public int param1 {get;set;}
         public int param2 {get;set;}
    
    }

    entonces usarias

    public Result traerValor()
    {
    	var result = new Result();
    
    	using (var conexionN = new SqlConnection(conexionBD.ConexionBasesD()))
    	{
    		var comando = new SqlCommand("NombreProcedure", conexionN);
    		//resto codigo
    		
    		comando.ExecuteNonQuery();
    		
    		            
    		result.mensaje = Convert.ToString(comando.Parameters["@mensaje"].Value);
    		result.param1 = Convert.ToInt32(comando.Parameters["@param1"].Value);
    		result.param2 = Convert.ToInt32(comando.Parameters["@param2"].Value);
    	}
    	
    	return result;
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 24 de agosto de 2020 20:17
  • Hola NathalyChR, 

      

    ¿Alguna novedad sobre la consulta realizada?

    Espero su respuesta.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    lunes, 24 de agosto de 2020 23:13
    Moderador
  • hola si, disculpe la demora, me funciono perfectamente, gracias Leandro :)
    miércoles, 26 de agosto de 2020 19:27
  • Gracias la respuesta me ayudo mucho
    miércoles, 26 de agosto de 2020 19:27