SqlDataAdapter

C# ADO.NET : remplir un DataSet en appelant une procédure stockée avec SqlDataAdapter

Dans la section précédente, nous utilisions SqlDataReader pour une lecture en flux, avant‑lecture seule. Ici, nous nous servons de SqlDataAdapter pour charger d’un coup les résultats d’une procédure stockée dans un DataSet (table de données hors‑connexion en mémoire). C’est très utilisé pour lier directement des contrôles comme DataGridView.
SqlCommand (définir la procédure stockée) → SqlDataAdapter.SelectCommandadapter.Fill(DataSet) récupère les données automatiquement

Exemple

string connectionString = "Data Source=.;Initial Catalog=db;Integrated Security=SSPI;";
using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();

    SqlCommand sqlCom = new SqlCommand();
    sqlCom.Connection = conn;
    sqlCom.CommandText = "myProc";
    // Indiquer qu’on exécute une procédure stockée
    sqlCom.CommandType = CommandType.StoredProcedure;

    // Fournir le paramètre d’entrée de la procédure stockée
    SqlParameter param = new SqlParameter("@id", SqlDbType.Int, 8);
    param.Value = 4;
    param.Direction = ParameterDirection.Input;
    sqlCom.Parameters.Add(param);

    // Adaptateur de données
    SqlDataAdapter sqlDA = new SqlDataAdapter();
    sqlDA.SelectCommand = sqlCom;

    DataSet ds = new DataSet();
    // Remplir le dataset ; deuxième paramètre = nom de la table interne
    sqlDA.Fill(ds, "sdfdsf");

    // Lier le contrôle grille WinForms
    this.dataGridView1.DataSource = ds.Tables[0];
}Langage du code : C# (cs)

Exemple mieux structuré

string connectionString = "Data Source=.;Initial Catalog=db;Integrated Security=SSPI;";
using (SqlConnection conn = new SqlConnection(connectionString))
{
    string procName = "myProc";
    using (SqlCommand sqlCom = new SqlCommand(procName, conn))
    {
        sqlCom.CommandType = CommandType.StoredProcedure;
        // Syntaxe simplifiée pour les paramètres
        sqlCom.Parameters.Add("@id", SqlDbType.Int).Value = 4;

        SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCom);
        DataSet ds = new DataSet();
        // Charger les résultats, alias de table ArticleResult
        sqlDA.Fill(ds, "ArticleResult");

        // Lier le contrôle
        dataGridView1.DataSource = ds.Tables["ArticleResult"];
        // Accès possible aussi par index : ds.Tables[0]
    }
}Langage du code : JavaScript (javascript)

Analyse

Comportement de SqlDataAdapter.Fill()
  1. Gestion automatique de la connexion : si la connexion n’est pas Open() au moment d’appeler Fill, l’adaptateur l’ouvre puis la referme à la fin ;

Le code exemple appelle explicitement conn.Open(). Ça fonctionne, mais ce n’est pas obligatoire.

  1. Fill(ds, "NomTable") : donne un nom au DataTable chargé en mémoire pour y accéder par nom. Sans précision, le nom par défaut est Table.
  2. Quand une procédure stockée retourne plusieurs jeux de résultats, Fill crée plusieurs DataTable : ds.Tables[0], ds.Tables[1]...
Comparaison clé : DataSet vs SqlDataReader
ObjetModeOccupation connexionCas d’usage
SqlDataReaderLecture flux connectéGarde la connexion base ouverteGros volumes, pas besoin de mise en cache complète, traitement ligne par ligne
DataSet(DataAdapter)Cache mémoire déconnectéLibère la connexion après FillLiaison contrôles UI, petits jeux de données, lectures répétées

Paramètre obligatoire pour procédure stockée

sqlCom.CommandType = CommandType.StoredProcedure;

Sans cette ligne, ADO.NET interprète myProc comme du texte SQL classique et renvoie une erreur.

Liaison des contrôles

dataGridView1.DataSource = ds.Tables[0];

Le contrôle WinForms DataGridView accepte une liaison directe avec un DataTable et génère automatiquement les colonnes.
Si vous voulez enregistrer des modifications dans la base, utilisez SqlDataAdapter.Update() pour des mises à jour par lot.

Sans ouverture manuelle de connexion

using(SqlConnection conn=new SqlConnection(connectionString))
using(SqlCommand cmd=new SqlCommand("myProc",conn))
{
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.Add("@id",SqlDbType.Int).Value=4;
    SqlDataAdapter da=new SqlDataAdapter(cmd);
    DataSet ds=new DataSet();
    da.Fill(ds,"Article"); // ouvre et ferme la connexion automatiquement
}Langage du code : JavaScript (javascript)

Cet exemple utilise des instructions using pour gérer la connexion

SqlDataAdapter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *