Settare le proprieta' di una classe da un DATAREADER

giovedì 03 aprile 2008 - 15.53

alba Profilo | Newbie

salve a tutti, sapreste suggerirmi come settare i valori delle proprieta' di una classe che rapprenta una table avendo un datareader?
Il datareader non ritorna tutti i campi mappati nella classe che rappresenta la table, i campi in questione possono variare. Quindi ci vorrebbe un ciclo che dal datareader ricava il tipo/nome e riempie la proprieta' corrispondente.....spero di essere stato chiaro

PS: ho trovato questo articolo che spiega esattamente cio' che vorrei
http://www.dotnethell.it/tips/Classi-Reflection.aspx
ma ho delle difficolta' a metterlo in pratica

grazie

fguida Profilo | Expert

Creerei un metodo al quale passare in modo ciclico il tuo dataReader; dentro esso verifichi che non siano a null i campi del dr, per così assegnarne il valore alle proprietà. Sarebbe interessante che poi l'oggetto con le sue proprietà venisse memorizzato in una collection magari una List...

Francesco

alba Profilo | Newbie

e' esattamente cio' che sto facendo, ma quello che non riesco a fare in pratica e' analizzare il datareader (per la cronaca e' da poco che mi cimento in c#), se hai qualche esempio te ne sarei molto grato
grazie

fguida Profilo | Expert

"DAL - Classe DetailProvider" --> Questo mi serve per avere la <List>:

public static List<Joints> GetJoints(string Cod, string CD) { Database db; db = DatabaseFactory.CreateDatabase("Rubrica"); DbCommand dbCommand = db.GetStoredProcCommand("SPJoints"); db.AddInParameter(dbCommand, "@Istituto", DbType.Int16, Cod); db.AddInParameter(dbCommand, "@CD", DbType.String, CD); Joints Joint; List<Joints> JointsList = new List<Joints>(); using (IDataReader dr = db.ExecuteReader(dbCommand)) { while (dr.Read()) { Joint = new Joints(); Joint = SetJoints(dr); ; JointsList.Add(Joint); } } return JointsList; }

Qui assegno i value:

protected static Joints SetJoints(IDataReader dr) { Joints jGiun= new Joints(); if (dr["Chiama"] != DBNull.Value) { jGiun.Chiamata = (decimal)dr["Chiama"]; } if (dr["Descrizione"] != DBNull.Value) { jGiun.Descrizione = (string)dr["Descrizione"].ToString().ToUpper(); } return jGiun; }

"BL"--> Da qui richiamo il DaL:

using StyleDAL; public List<Joints> GetJoints(string Cod, string CD) { return DetailsProvider.GetJoints(Cod, CD); }

Spero sia chiaro

Francesco

alba Profilo | Newbie

grazie per il suggerimento che adesso provero' a testare, nel frattempo ho "trovato" un'altra soluzione, decisamente piu' maccheronica, ma funzionale

il problema era capire quali campi ritornava il datareader e di conseguenza mappare le proprieta' della classe che rappresenta la mia table nel DB. Per fare questo ho aggiunto a tutte le proprieta'
if (rs.GetName(0) == "NOME_CAMPO")

dove rs rappresenta il mio datareader, quindi se il GetName(0) contiene un determinato campo gli faccio fare il set della proprieta'

grazie ancora per l'aiuto

fguida Profilo | Expert

Di nulla..se poi non ti risolve la cosa, fammi sapere.
Buon week

Francesco
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5