J'utilise MySQL Connector/Net et je veux écrire une requête sur une table dont le nom sera spécifié lors de l'exécution.Quelle est la meilleure façon de choisir un nom de table dynamiquement à l'exécution?
Cet exemple est du haut de ma tête (non testé):
public class DataAccess
{
public enum LookupTable
{
Table1,
Table2,
Table3
}
public int GetLookupTableRowCount(LookupTable table)
{
string tableName = string.Empty;
switch (table)
{
case LookupTable.Table1:
tableName = "table_1";
break;
case LookupTable.Table2:
tableName = "table_2";
break;
case LookupTable.Table3:
tableName = "table_3";
break;
default:
throw new ApplicationException("Invalid lookup table specified.");
}
string commandText = string.Concat("SELECT COUNT(*) FROM ", tableName);
// Query gets executed and function returns a value here...
}
}
Depuis que je ne pense pas que vous pouvez paramétrer un nom de table dans une requête, j'ai utilisé un ENUM plutôt qu'une chaîne en le paramètre de la fonction pour limiter la possibilité de SQL injection.
Est-ce que sembler une bonne approche? Y a-t-il un meilleur moyen?
Est-ce que .net ne supporte pas l'ajout de propriétés supplémentaires au type enum? – Jherico
Voulez-vous dire comme Table1 = "table_1", etc. Si oui, alors vous ne pouvez utiliser que des types entiers comme int, et long. –