none
Aus der MSDN Hotline: Umlaute bei DataTable Filter RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,

    heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:
    Hallo, in einer DataTable habe ich eine Liste mit deutschen Namen. Ich will, wenn ich nach "Müller" suche, alle Datensätze bekommen, die sowohl "Müller", als auch "Mueller" enthalten. Wie mache ich das?

    Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
    SQL Server bietet diese Funktionalität, wenn man beim Anlegen der Datenbank das Collation auf German_Phonebook_CI_AI setzt. Die untere Anfrage würde dann alle Datensätze zurückgeben, die sowohl "Müller", als auch "Mueller" enthalten:

    SELECT * FROM [Tabelle] WHERE [Name] LIKE '%Müller%'

    DataTable bietet leider diese Funktionalität standartmäßig nicht. Damit man beim Ausführen von DataTable.Select() alle Datensätze bekommt, unabhängig davon, ob man nach "Müller" oder "Mueller" sucht, muss man die Anfrage folgendermaßen aufbauen:

    DataTable.Select(„Name = 'Mueller' OR Name = 'Müller'“)

    Man kann aber eine Hilfefunktion benutzen, die ü nach ue, ä nach ae usw. "übersetzt":

    Function EnthaeltUmlaute(ByVal str As String, ByRef invariantStr As String) As Boolean
            If str.Contains("ä") Or _
               str.Contains("ö") Or _
               str.Contains("ü") Or _
               str.Contains("ß") Or _
               str.Contains("Ä") Or _
               str.Contains("Ö") Or _
               str.Contains("Ü") _
            Then
                str = str.Replace("ä", "ae")
                str = str.Replace("ö", "oe")
                str = str.Replace("ü", "ue")
                str = str.Replace("ß", "ss")
                str = str.Replace("Ü", "Ue")
                str = str.Replace("Ö", "Oe")
                str = str.Replace("Ä", "Ae")
     
                invariantStr = str
                Return True
            End If
     
            invariantStr = String.Empty
            Return False
    End Function

     
    Die Funktion kann man dann wie folgt benutzen:
     

    Dim fieldName As String = "Name"
    Dim name As String = "Müller"
    Dim query As String = fieldName + "='" + name + "'"
    Dim invariantName As String = String.Empty
    If EnthaeltUmlaute(name, invariantName) Then
       query += " OR " + fieldName + "='" + invariantName + "'"
    End If



    Viele Grüße,
    Krassimir Valev
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline 
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.

    • Verschoben Robert BreitenhoferModerator Freitag, 25. Juni 2010 15:34 SQL Server (aus:Aus der MSDN Hotline: Häufig gestellte Fragen und deren Antworten)
    Mittwoch, 11. November 2009 16:06