Posts
337
Comments
125
Trackbacks
5
January 2008 Entries
Kleine Funktion um eine URL zu überprüfen

Hier eine kleine Funktion um eine URL auf gültige Zeichen zu überprüfen:

// Replaces every Character, that is not suiteable for an Url with other Characters
static public string ToValidUrl( string s ) {

StringBuilder sb = new StringBuilder( s.Length+10 ); // A little bit bigger to keep changes
char[] c = s.ToCharArray();

for( int i=0; i < c.Length; i++) {
           
switch( c[i] ) {

case 'ß' : sb.Append("ss"); break;
case 'ä' : sb.Append("ae"); break;
case 'ö' : sb.Append("oe"); break;
case 'ü' : sb.Append("ue"); break;
case 'Ä' : sb.Append("Ae"); break;
case 'Ö' : sb.Append("Oe"); break;
case 'Ü' : sb.Append("Ue"); break;
case ' ' : sb.Append("-"); break;
case '{' : sb.Append("-"); break;
case '}' : sb.Append("-"); break;
case '(' : sb.Append("-"); break;
case ')' : sb.Append("-"); break;
default  : sb.Append( c[i] ); break;
}

}

return sb.ToString();

}

posted @ Saturday, January 26, 2008 8:54 AM | Feedback (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 @ Wednesday, January 16, 2008 8:26 AM | Feedback (1)