In Frameworks werden gerne O/R Mapper verwendet, die einen einfachen Zugriff auf die Datenbank sowie die einzelnen Datentypen einer Tabelle ermöglichen .
Ein kleiner Nachteil dieser O/R Mapper ist die Tatsache, dass sie pro Select jeweils die komplette Tabellenzeile als Objekt zurückgeben.
Bei Tabellen mit vielen Feldern oder Datenbankabfragen die den Inhalt mehrerer Tabellen zurückgeben, kann dies zu Lasten der Performance gehen.
In solch einem Falle empfiehlt es sich nicht den O/R Mapper zu verwenden, sondern nur die tatsächlich benötigten Werte mittels des Selects auslesen und diese mittels einer Datatable zu übergeben:
public DataTable GetData ( searchcriteria )
// build SQL
// ...
IDataReader reader = base.ExecuteReader(sql);
if( reader == null ) return null;
DataTable dataTable = new DataTable( "Report" );
dataTable.Columns.Add( "City", typeof( string ) );;
dataTable.Columns.Add( "Date", typeof( string ) );
dataTable.Columns.Add( "Status", typeof( int ) );
try {
while( reader.Read() ) {
DataRow dr = dataTable.NewRow();
dr[0] = Util.ToValidString( reader[0] );
dr[1] = Util.ToValidString(reader[1]);
dr[2] = Util.ToValidInt(reader[2]);
dataTable.Rows.Add( dr );
}
}
finally {
reader.Close();
}
return datatable;
}
Diese Werte lassen sich dann mit einer foreach-Schleife ausgeben:
DataTable ReportData = GetData ( searchcriteria ) ;
foreach( DataRow dr in ReportData.Rows ) {
// do someting
}