In questo frammento di codice, scritto in C# e basato su ADO.NET, vediamo come convertire un DataRow in un oggetto contenente i dati presenti nella riga.
La funzione utilizza la reflection per analizzare le proprietà dell'oggetto e assegnare a ciascuna di esse il valore presente nel DataRow. La corrispondenza viene effettuata utilizzando il nome della proprietà e il nome della colonna: se nel DataRow è presente una colonna con lo stesso nome della proprietà, il relativo valore viene assegnato all'oggetto.
La funzione gestisce inoltre i valori DBNull e tenta di convertire automaticamente il valore della colonna nel tipo della proprietà dell'oggetto.
La funzione per convertire il DataRow in un oggetto
C#
public T DataRowToObject<T>(DataRow riga) where T :
new()
{
T obj = new T();
var propieta =
typeof(T).GetProperties();
foreach (var prop in propieta)
{
if (!riga.Table.Columns.Contains(prop.Name))
continue;
object value = riga[prop.Name];
if (value == DBNull.Value)
{
prop.SetValue(obj, null);
continue;
}
Type propType =
Nullable.GetUnderlyingType(prop.PropertyType)
?? prop.PropertyType;
try
{
object convertedValue =
Convert.ChangeType(value, propType);
prop.SetValue(obj, convertedValue);
}
catch
{
prop.SetValue(obj, value.ToString());
}
}
return obj;
}
Esempio di utilizzo
Supponiamo di avere una classe Anagrafica. Possiamo utilizzare la funzione passando come parametro il primo elemento della tabella:
C#
Anagrafica anagrafica = DataRowToObject<Anagrafica>(dttDati.Rows[0]);
In questo modo, le proprietà dell'oggetto Anagrafica verranno valorizzate utilizzando i dati presenti nel DataRow, sulla base della corrispondenza tra i nomi delle proprietà e quelli delle colonne.
Nessun commento:
Posta un commento