none
Como crear procedimiento generico al cual se le pase la sentencia SQL como parametro y ejecutarlo con sp_executesql ? RRS feed

  • Pregunta

  • hola...

    Desarrollo una App Asp.Net (WebForms ) para la cual no dispongo mucho tiempo, lo primero que debo resolver es la obtencion de los registros de las tablas en DB usando un metodo o procedimiento generico...

    se que en mi codigo c# debo tener algo como esto:

    string SQL = "SELECT * FROM " + Nombre_Tabla

        public DataTable SelectFilas(string SQL)
            {
                DataTable dataTabla = new DataTable();
                SqlConnection Conexion = new SqlConnection(cadenaConexion);

                using (Conexion)
                {
                    Conexion.Open();
                    SqlCommand command = new SqlCommand("Sp_SelectFilas", Conexion);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Clear();
                    command.Parameters.AddWithValue("@SQL", SQL);
                    SqlDataAdapter dataAdaptador = new SqlDataAdapter(command);
                    dataAdaptador.Fill(dataTabla);
                    Conexion.Close();
                }
                return dataTabla;
            }

    pero no se que debo escribir en la programacion de mi base de datos ???



    EFRAIN MEJIAS C VALENCIA - VENEZUELA


    miércoles, 5 de septiembre de 2018 22:05

Respuestas

  • Si entiendo Bien Necesitas un método Genérico en c# que te traiga la información de la base de datos hay mucha maneras no necesariamente tienes que hacer un SP que ejecute la información que estas enviado,  sin embargo eso que estas haciendo SQL Query string SQL = "SELECT * FROM "  si tendrás un SP que ejecutara el dinamismo  coloca el string de la sentencia dentro del SP así tu código internamente sera mas seguro.

    Del lado del SP deberías tener algo así 

    CREATE PROCEDURE DInamicoSP

    @sqlColumnas varchar(1000)),   

    @sqlTabla varchar(75),

    @sqlWhere varchar(1000)

    AS   

    BEGIN

        SET NOCOUNT ON;  

       

    SET @sqlCommand = 'SELECT ' + @sqlColumnas + ' FROM  + @sqlTabla + '  WHERE ' + @sqlWhere

    EXEC (@sqlCommand)

    END 


    Nada es imposible

    jueves, 6 de septiembre de 2018 4:09
  • Hola Efrain:

    create procedure sp_selectFilas (@SQL nvarchar(1000))
    as
    
    declare  @sentencia NVARCHAR(4000) = N'SELECT * FROM ' + @SQL + ';';
    exec sp_executesql @sentencia
    return
    

    exec vs sp_executesql

    Un saludo

    jueves, 6 de septiembre de 2018 6:37

Todas las respuestas

  • Si entiendo Bien Necesitas un método Genérico en c# que te traiga la información de la base de datos hay mucha maneras no necesariamente tienes que hacer un SP que ejecute la información que estas enviado,  sin embargo eso que estas haciendo SQL Query string SQL = "SELECT * FROM "  si tendrás un SP que ejecutara el dinamismo  coloca el string de la sentencia dentro del SP así tu código internamente sera mas seguro.

    Del lado del SP deberías tener algo así 

    CREATE PROCEDURE DInamicoSP

    @sqlColumnas varchar(1000)),   

    @sqlTabla varchar(75),

    @sqlWhere varchar(1000)

    AS   

    BEGIN

        SET NOCOUNT ON;  

       

    SET @sqlCommand = 'SELECT ' + @sqlColumnas + ' FROM  + @sqlTabla + '  WHERE ' + @sqlWhere

    EXEC (@sqlCommand)

    END 


    Nada es imposible

    jueves, 6 de septiembre de 2018 4:09
  • Hola Efrain:

    create procedure sp_selectFilas (@SQL nvarchar(1000))
    as
    
    declare  @sentencia NVARCHAR(4000) = N'SELECT * FROM ' + @SQL + ';';
    exec sp_executesql @sentencia
    return
    

    exec vs sp_executesql

    Un saludo

    jueves, 6 de septiembre de 2018 6:37