giovedì 24 settembre 2026

C# trasformare un DataRow in un oggetto Ado.NET

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: