Récupérer les données obtenues par une source de données avec ASP.NET

Il est possible d'utiliser une source de données pour effectuer un SELECT et récupérer par programmation le résultat de cette requête. Ceci nous permettra de manipuler les données à notre guise, un peu comme si on avait fait la requête « à bras », tout en profitant des facilités des sources de données.

▼Publicité

Utilisation d'un DataView

Un DataView est un objet permettant de stocker un ensemble de données en mémoire. Attention : le mot DataView réfère à une vue au sens SQL. Il ne s'agit pas d'un contrôle visuel.

Un DataView est tout à fait approprié pour stocker le résultat d'une requête. 

En mémoire, le contenu du DataView sera un tableau à deux dimensions. On aura une ligne par enregistrement retourné. Pour chaque enregistrement, on aura une colonne pour chaque champ demandé dans la requête.

1 Apple iPad 4e génération 16 Go Wi-Fi
2 Ordinateur Toshiba Satellite L850
4 Clé USB Kingston 32 Go
8 Router D-Link sans fil 802.11b/g/n

Requête qui ne retourne qu'un seul enregistrement

Si la requête permet de retrouver 0 ou 1 enregistrement, la structure du code pour récupérer le résultat de la requête dans un DataView ressemblera à ceci :

Ex :

Fichier .aspx.cs (ASP.NET avec C#)

DataView dataViewProduit = (DataView)dataSourceProduit.Select(DataSourceSelectArguments.Empty);

 

if (dataViewProduit.Count > 0)   

{

    DataRowView donnees = dataViewProduit[0];   // retrouve la première ligne de données (ce sera la seule)

    id = ...

    description = ...

}

else

{

    labelMessage.Text = "...";

}

Requête permettant de retourner plusieurs enregistrements (boucler dans les résultats de la requête)

Lorsque votre requête peut retourner plusieurs enregistrements, vous aurez probablement besoin de boucler dans les résultats de la requête et de faire un traitement particulier pour certains enregistrements. Le code suivant vous permettra d'y arriver.

Ex :

Fichier .aspx.cs (ASP.NET avec C#)

DataView dataViewProduit = (DataView)dataSourceProduit.Select(DataSourceSelectArguments.Empty);

 

if (dataViewProduit.Count > 0)   

{

    foreach (DataRowView donnees in dataViewProduit)

    {

        if (...)

        {

            ...

        }

        else if (...)

        {

            ...

        }

        else if (...)

        {

            ...

            // dans cet exemple, on utilise break pour sortir de la boucle foreach lorsqu'on a trouvé une valeur donnée

            // à vous d'adapter ce code pour répondre à vos besoins

            break;   

        }

    }

}

else

{

    labelMessage.Text = "...";

}

Extraire les données du DataView

Pour manipuler les données, on doit extraire une ligne du tableau en la stockant dans un objet de type DataRowView. Cette extraction devra être réalisée même si la requête n'a retourné qu'un seul enregistrement.

Ex : si la requêne ne retourne qu'un seul enregistrement :

Fichier .aspx.cs (ASP.NET avec C#)

DataRowView donnees = dataViewProduit[0];   // retrouve la première ligne de données

ou, si la requête peut retourner plusieurs enregistrements :

Fichier .aspx.cs (ASP.NET avec C#)

foreach (DataRowView donnees in dataViewProduit)

{

    ...

}

Dans cet exemple, la variable donnees aura la forme suivante :

1 Apple iPad 4e génération 16 Go Wi-Fi

Le DataRowView est un vecteur. Chaque champ peut donc être lu à l'aide d'un indice. Plutôt que de travailler avec des indices numériques, on travaillera avec le nom du champ.

Attention : un élément tiré d'un DataRowView est un objet. Il faut donc le transtyper pour pouvoir l'utiliser correctement.

Ex :

Fichier .aspx.cs (ASP.NET avec C#)

int id = Convert.ToInt32(donnees["produit_id"]);    // contiendra la valeur 1

String description = donnees["produit_description"].ToString();   // contiendra la valeur « Apple iPad 4e génération 16 Go Wi-Fi »

Traiter les données nulles

Lorsque vous traitez manuellement les données d'une source de données, il faut savoir qu'une donnée nulle est différente d'une donnée vide.

Pour éviter d'avoir à gérer différemment ces deux valeurs, assurez-vous lors du design de vos tables que les champs acceptant les valeurs nulles aient réellement besoin de pouvoir contenir des valeurs nulles.

(string) vs ToString()

Lorsque vous récupérez les données d'un champ, il faut les convertir au type désiré. Si la donnée est une chaîne de caractères, il est préférable d'utiliser ToString() plutôt que d'utiliser la conversion de type (string). En effet, si la donnée était nulle, ToString() la convertirait en chaîne vide alors que le transtypage provoquerait une erreur.

Fichier .aspx.cs (ASP.NET avec C#)

// plante à l'exécution si le champ page_titre est à nul pour l'enregistrement traité

// message obtenu : Impossible d'effectuer un cast d'un objet de type 'System.DBNull' en type 'System.String'.

htmlTitle.Text = (string)donnees["page_titre"];   

Fichier .aspx.cs (ASP.NET avec C#)

// ne plante pas même si le champ page_titre est à nul pour l'enregistrement traité

// si nul, htmlTitre.Text sera mis à blanc 

htmlTitle.Text = donnees["page_titre"].ToString();  

Vérifier si les données sont nulles

Si vous avez à effectuer un traitement particulier pour les données nulles, il est possible de les cibler à l'aide de la syntaxe suivante :

Ex :

Fichier .aspx.cs (ASP.NET avec C#)

if (donnees["page_titre"] == DBNull.Value)

{

   ...

}

Pour plus d'information

« Les bases fondamentales du langage Transact SQL ». Dotnet France.http://www.dotnet-france.com/Documents/SQLServer/Les%20bases%20fondamentales%20du%20langage%20Transact%20SQL.pdf

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories