1 votes

Construire une requête SQL avec SQL Data Adapter ? Générer une requête à partir de la section de configuration

Je ne sais pas si j'aborde la question de la bonne manière, mais je suis très ouvert et j'apprécierai toute suggestion.

Je crée un graphique à partir de données contenues dans une base de données SQL.

Le graphique comporte les champs "Age" et "Percentile", qui sont les deux champs qui m'intéressent le plus.

J'ai une section de configuration dans mon web.config appelée "Percentiles". Cela permet d'identifier les percentiles à afficher dans cette section de configuration. Par exemple :

<percentiles>
<add percentile="P50" visible="true">
<add percentile="P75" visible="true">
<add percentile="P85" visible="false">
<add percentile="P95" visible="true">
...
</percentiles>

Je vais analyser la liste des percentiles et je voudrais soit filtrer mon DataSet, soit générer ma requête sur la base de cette liste. Les percentiles sont stockés en tant que colonnes dans la base de données. Ainsi, par exemple, je voudrais que ma requête ressemble à ceci sur la base de cette configuration

SELECT P50, P75, P95 FROM MyData

Je suppose que je pourrais simplement faire SELECT * et supprimer ces colonnes de mon ensemble de données, ou simplement ne pas les ajouter en tant que "série" à mon graphique. Cependant, je suis un développeur novice qui cherche à améliorer sa façon de faire. D'après ma petite expérience, il semble que l'extraction de toutes les données (même si elles sont peu nombreuses) ne soit pas une bonne pratique.

C'est donc ici que j'arrive à l'adaptateur de données SQLDataAdapter. Est-il possible de construire ma requête via le code pour n'inclure que les colonnes que je veux ? Le psuedocode que je me demande si c'est possible est quelque chose comme ceci :

foreach(Percentile p in PercentileConfiguration)
{
    myDataAdapter.Select.Columns.Add(p.Percentile);
}

Est-ce une bonne approche ? Toutes les suggestions sont les bienvenues ! Je vous remercie !

0voto

Mike Brind Points 11445

Je suis confus. À première vue, il semble s'agir d'une question portant uniquement sur la façon d'interroger une base de données. Et la réponse à cette question est que vous construisez une commande SQL pour le faire. Je ne comprends pas pourquoi vous stockez les noms des champs de la base de données dans le web.config. Si vous voulez qu'une requête ressemble à "SELECT P50, P75, P95 FROM MyData", faites-le.

0voto

Mr Bell Points 2990

SELECT * .... va être légèrement plus lent que SELECT P50, P75, etc. Mais seulement de façon marginale. Si vous n'exécutez la requête qu'une seule fois (par opposition à plusieurs fois dans une boucle, ou autre), et que votre table ne comporte pas une quantité massive de colonnes, ou des colonnes avec des données énormes, alors la baisse de performance sera si minime que l'effort et la maintenance pour sélectionner des colonnes spécifiques n'en vaudront probablement pas la peine. Quelqu'un m'a dit un jour que si vous avez le choix entre un code qui est lisible (maintenable) et un code qui s'exécutera une milliseconde plus vite, choisissez le code lisible.

Cela dit, si vous le faites, il vous suffit de construire le texte sql et de le passer à votre adaptateur.

Quelque chose comme :

StringBuilder columns = new StringBuilder();
foreach(Percentile p in PercentileConfiguration)
{
    if(columns.ToString().Length > 0) columns.Append(", ");
    columns.Append(p.Percentile);
}
string sql = string.Format("SELECT {0} FROM myTable", columns.ToString());
SqlDataAdapter da = new SqlDataAdapter(sql, connectionString);
...
...
...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X