Rellenar un dataset en código y de forma general

A partir de una pregunta en los foros de www.es-asp.net, he comenzado a contestar... y he visto que bien merecía un artículo.

La duda en cuestión era la de cómo rellenar un DataSet en código... una posible respuesta hubiera sido "con un DataAdapter"... pero eso queda muy soso, por lo que me ha dado por ponerme a hacer una función (seguramente ya la haya hecho alguien por ahí, pero yo no he encontrado nada tras cerca de 30 segundos googleando).

La función se autoexplica bastante con sus comentarios. Sólo deciros que (tras una correcta configuración) sirve para cualquier tipo de Base de Datos, así que aquí la tenéis:

    using System;
    using System.Configuration;
    using System.Data;
    using System.Data.Common;

    ...

        /// <summary>
        /// Como el select se realiza mucha veces, y el modo es siempre muy similar
        /// hacemos un metodo general. Devuelve un dataset.
        /// </summary>
        /// <param name="SP_or_SQL">Nombre del procedimiento almacenado o sentencia SQL</param>
        /// <param name="parameters">Colección de parámetros</param>
        /// <param name="Conn">
        /// Nombre de la conexión (Ubicado en el Web.Config)
        /// </param>
        /// <param name="sProvider">
        /// Nombre del proveedor de datos (Ubicado en el Web.Config)
        /// </param>
        /// <param name="cType">
        /// Tipo de comando. Generalmente será un procedimiento almacenado o una sentencia SQL
        /// </param>
        /// <returns></returns>
        public static DataSet DSSelectGeneral(string SP_or_SQL, DbParameterCollection parameters, string Conn, string sProvider, CommandType cType)
        {
            string DataProviderName = ConfigurationManager.AppSettings[sProvider];
            DbProviderFactory dpf = DbProviderFactories.GetFactory(DataProviderName);

            DbConnection con = dpf.CreateConnection();
            con.ConnectionString = ConfigurationManager.ConnectionStrings[Conn].ConnectionString;

            DbCommand command = dpf.CreateCommand();
            command.Connection = con;
            command.CommandType = cType;
            command.CommandText = SP_or_SQL;

            foreach (DbParameter param in parameters)
                command.Parameters.Add(param);

            DbDataAdapter adapt = dpf.CreateDataAdapter();
            adapt.SelectCommand = command;

            DataSet ds = new DataSet();

            adapt.Fill(ds);

            return ds;
        }



Sólo hay dos puntos a recalcar:

            string DataProviderName = ConfigurationManager.AppSettings[sProvider];
            con.ConnectionString = ConfigurationManager.ConnectionStrings[Conn].ConnectionString;

¿Qué son sProvider y Conn?
Ambos son claves que apuntan a la sección de Configuration de nuestro web.config.

Por ejemplo, si en nuestro web.config tenemos:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <appSettings>
    <add key="myProvider" value="System.Data.SqlClient" />
  </appSettings>
  <connectionStrings>
    <add name="Conn" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\personal.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>

    ....

<
/configuration>

Haremos que sProvider = "myProvider" y Conn = "Conn".
El primero indicando qué tipo de base de datos vamos a usar (En este caso "System.Data.SqlClient") y el segundo indicando el ConnectionString.

Haciéndolo de este modo, podríamos cambiar de base de datos y nos bastaría con cambiar el value de "myProvider".

Espero que os haya sido útil!!