none
Metodos para llamar Store Procedure desde C# RRS feed

  • Pregunta

  • Tengo este metodo para ejecutar procedimientos almacenados

        public void EjecutarSP(string sp)
        {
            try
            {
                SqlCommand cmd = new SqlCommand(sp, ConexionBD.con);
                cmd.CommandType = CommandType.StoredProcedure;
                ConexionBD.Conectar();
                cmd.ExecuteNonQuery();
                ConexionBD.Desconectar();
            }
            catch (Exception ex)
            {
                throw new Exception(" Error al ejecutar procedimiento almacenado ", ex);
            }
        }

    Este método me sirve genéricamente cuando los procedimientos almacenados no reciben ni devuelven ningún valor, quería saber si hay alguna manera de hacerlos genéricos para cuando el procedimiento almacenado recibe y devuelve parámetros, creo que para la parte de devolución puedo utilizar ExecuteReader que me devuelve una tabla y después trabajarla en la aplicacion, pero para la parte de envió de parámetros no se si se pueda hacer algo genérico ya que no todos los procedimientos almacenados reciben la misma cantidad de parametros

    viernes, 3 de febrero de 2017 13:56

Respuestas

  • hola

    >>lo que pasa es que vos tenes las query en el código, yo las tengo en un SP

    pero solo cambia la asignacion del

    cmd.CommandType = CommandType.StoredProcedure;

    depsues el resto es igual

    >>lo que quería hacer genérico era un método para poder pasar varios parámetros al procedimiento almacenado,

    no hagas eso, es para problemas, en todo caso usa librerias existentes

    net-Query

    pero crea una capa de datos

    >>Lo que me falta es saber como usar parameters para que lleguen al sp

    podrias definir una List<SqlParameter> en el metodo pasa asignando al command

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 6 de febrero de 2017 14:11

Todas las respuestas

  • hola

    no uses metodo genericos para ejecutar consultas, es una pesima idea que termina generando pesimo codigo, defiens uan capa de datos

    analiza el articulo

    [WinForms] Edición Empleados

    alli explico como crear una capa de datos para ejecutar consulta y devolver entidades, es la forma correcta de desarrollar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 3 de febrero de 2017 14:31
  • Hola Leandro, ante todo gracias por tu comentario

    Vi el código de lo que me pasaste, lo que pasa es que vos tenes las query en el código, yo las tengo en un SP, lo que quería hacer genérico era un método para poder pasar varios parámetros al procedimiento almacenado, no las consultas en si, por ahora tengo algo asi

    public SqlDataReader EjecutarSP(string sp, SqlParameter[] parameters)
        {
            try
            {
                SqlCommand cmd = new SqlCommand(sp, ConexionBD.con);
                cmd.CommandType = CommandType.StoredProcedure;
                ConexionBD.Conectar();
                SqlDataReader reader = command.ExecuteReader();
                return reader;
                ConexionBD.Desconectar();
            }
            catch (Exception ex)
            {
                throw new Exception(" Error al ejecutar procedimiento almacenado ", ex);
            }
        }

    Esto iría en una clase que trabaja con la base de datos y seria genérico para otras clases por ejemplo PersonasBD, PersonasBD enviaría en sp el nombre del procedimiento almacenado a usar y en parameters los parámetros que recibe el sp y se le devolvería el resultado de la consulta como reader. 
    Lo que me falta es saber como usar parameters para que lleguen al sp

    (Creo que tengo que cambiar el return de lugar, solo que lo arme recien rapido)

    Saludos y gracias

    lunes, 6 de febrero de 2017 14:05
  • hola

    >>lo que pasa es que vos tenes las query en el código, yo las tengo en un SP

    pero solo cambia la asignacion del

    cmd.CommandType = CommandType.StoredProcedure;

    depsues el resto es igual

    >>lo que quería hacer genérico era un método para poder pasar varios parámetros al procedimiento almacenado,

    no hagas eso, es para problemas, en todo caso usa librerias existentes

    net-Query

    pero crea una capa de datos

    >>Lo que me falta es saber como usar parameters para que lleguen al sp

    podrias definir una List<SqlParameter> en el metodo pasa asignando al command

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 6 de febrero de 2017 14:11