Posts
391
Comments
127
Trackbacks
0
Datenbankabfragen optimieren

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
}

posted on Wednesday, January 16, 2008 8:26 AM Print
Comments
No comments posted yet.

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 1 and 2 and type the answer here: