Modificar un CommandText de un TableAdapter en tiempo de ejecución

WebProgramacion > Recursos sobre informática y tecnología > Programacion > C# > Modificar un CommandText de un TableAdapter en tiempo de ejecución
C#
Autor: Dámaso Velázquez Álvarez

En el siguiente ejemplo vamos a ver cómo podemos modificar el texto de la consulta SQL de un objeto de tipo TableAdapter. Como motor de base de datos vamos a utilizar MySql.

Realizaremos la implementación de un método de ejemplo en el DataSet que nos devuelva los datos sin ordenar pero crearemos una clase para que en tiempo de ejecución podamos obtener los datos de manera ordenada pasándole la parte del ORDER BY en una variable de tipo String.

En nuestro ejemplo tendremos una tabla llamada personas con los campos id, nombre, apellidos y email. Crearemos un DataSet tipado como mostramos en la siguiente imagen:

Estructura de la tabla personas (id, nombre, apellidos, email)

Ahora hacemos doble clic sobre el TableAdapter del DataSet e implementamos el siguiente código:

namespace ClassLibrary1.dsEjemploTableAdapters {   
    public partial class personasTableAdapter
    {
        public void SetOrden(string orden)
        {
            this.CommandCollection[0].CommandText += orden;
        }
    }
}

Ahora implementamos la clase Ejemplo que tendrá un método llamado GetDatosOrdenados que nos devolverá dicha tabla ordenada dependiendo del parámetro pasado.

public class Ejemplo
{
    dsEjemploTableAdapters.personasTableAdapter adaptador;

    /// <summary>
    /// Constructor de la clase Ejemplo. Instanciaremos el adaptador de acceso a datos.
    /// </summary>
    public Ejemplo()
    {
        this.adaptador = new dsEjemploTableAdapters.personasTableAdapter();
    }

    /// <summary>
    /// Método público que devolverá la tabla 'personas' ordenada dependiendo del parámetro órden
    /// en tiempo de ejecución (programmatically)
    /// </summary>
    /// <param name="orden"></param>
    /// <returns></returns>
    public dsEjemplo.personasDataTable GetDatosOrdenados(String orden)
    {
        adaptador.SetOrden(orden);
        return adaptador.GetData();
    }
}

Veamos cómo llamar al método que acabamos de implementar. En nuestro pequeño ejemplo rellenaremos un GridView de ASP.NET con la información de la tabla personas ordenada por nombre.

ClassLibrary1.Ejemplo ejemplo = new ClassLibrary1.Ejemplo();
grdEjemplo.DataSource = ejemplo.GetDatosOrdenados("ORDER BY nombre");
grdEjemplo.DataBind();

Este tipo de implementaciones puede resultar práctico por ejemplo a la hora de paginar datos en tiempo de ejecución, reordenar gran cantidad información mediante el motor de la base de datos que siempre será más óptimo que hacerlo mediante código.

Estructura de la tabla personas (ID, nombre, apellidos, email)