Remplir une List<T>/un objet avec une DataTable.
Bonjour,
ceci étant mon premier message sur le forum j'espère qu'il sera assez détaillé !
Je souhaite créer une application pour gérer le matériel de mon association.
Je découpe mon code en 3 parties. La partie Data Access Layer permettant l'accès au données, la partie Client Layer avec une interface graphique de type console et la Business Layer avec les classes objets et les différentes méthodes.
Ces 3 parties sont aussi découpées en projets et classes.
Je vais maintenant vous présenter mon code ;
Business Layer > Domaine contient les objets de mon projet.
La classe matériel contient les informations de base sur le matériel, la classe Tuba contient les informations sur le tuba.
Actuellement la classe Tuba ne contient pas de propriétés.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public abstract class Materiel
{
private int id;
private string code;
private string nom;
public int ID
{
get { return this.id; }
set { this.id = value; }
}
public string Code
{
get { return this.code; }
set { this.code = value; }
}
public string Nom
{
get { return this.nom; }
set { this.nom = value; }
}
public Materiel(){}
public Materiel(int idMateriel, string codeMateriel, string nomMateriel)
{
ID=idMateriel;
Code=codeMateriel;
Nom=nomMateriel;
}
} |
Code:
1 2 3 4 5 6 7 8
| public sealed class Tuba : Materiel
{
public Tuba():base(){}
public Tuba(int idTuba, string codeTuba, string nomTuba)
:base(idTuba, codeTuba, nomTuba)
{}
} |
Business Layer > Service contient les méthodes de mon projet.
La classe Service contient deux méthodes. La première sert a retourner les informations concernant l'ensemble des tubas.
La seconde sert a retourner le tuba correspondant au code.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public List<Materiel> GetAllTubas()
{
List<Materiel> ListMateriel = new List<Materiel>();
foreach(DataRow row in dt.Rows) //Le nom "dt" n'existe pas dans le contexte actuel
{
ListMateriel.Add(row["nom_materiel"]);
}
return ListMateriel;
} |
Code:
1 2 3 4 5 6 7 8 9
| public Materiel GetTubaByCode(string codeTuba)
{
Tuba TubaByCode = new Tuba();
//...
return TubaByCode();
} |
Je ne sais malheureusement pas comment remplir mes objets avec ma DataTable !
Cette partie du code n'est pas fonctionnelle du tout, je fait des tests...
Data Access Layer > DataAccess
La classe DataAccess permet la connexion à la base de données et contient une méthode retournant un DataTable.
Actuellement ce morceau de code est en phase de test. Il fonctionne et retourne bien la valeur que je cherche : Tuba numéro 0001 = Tuba vert.
Je me base sur une base de données déjà existante sous Oracle.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public DataTable GetTubaDatabase(string codeTuba)
{
string oradb = "DataSource=databaseClubPlongee; User Id=user; Password=user;";
OracleConnection conn = new OracleConnection(oradb);
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select nom_tuba from tubaTable where code_tuba = '" + codeTuba +"'";
cmd.CommandType = CommandType.Text;
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
foreach(DataRow row in dt.Rows)
{
Console.WriteLine("Tuba numéro {0} = {1}", codeTuba, row["nom_tuba"]);
}
conn.Dispose();
return dt;
} |
Mais le découpage n'est pas correct!
Je souhaite donc que mes deux méthodes de la classe Service (GetAllTubas et GetTubaByCode) utilisent la DataTable pour créer les différents objets et les retourner à la console.
Je pense que je ne suis pas si loin de la solution mais je bloque.
Avec le code actuel je ne peut retourner l'ensemble des tubas ! J'aimerais que si codeTuba est null/empty que ma DataTable se remplissent avec l'ensemble des tubas.
Votre aide est vraiment la bienvenue, merci d'avance ! :D