Groß- und Kleinschreibung bei SQL-Abfrage
-
Ich greife mit einer CRecordset-Klasse mittels ODBC auf eine MS SQL Serever Express 2005 Datenbank zu. Wenn ich jetzt m_strFilter parametriere, dann wird bei den übergebenen Zeichenketten auch exakt die Groß- und Kleinschreibung beachtet. Wenn ich im Managementstudio die Abfrage durchführe, dann wird die Groß- und Kleinschreibung ignoriert. Ich möchte aber, dass beim Logindialog die aus der Datenbank ausgelesenen Benutzernamen unabhängig von Groß- und Kleinschreibung gezogen werden. Wie kann ich das anstellen?
-
Bist Du da sicher?
Ich kann das so nicht bestätigen. Die Vergleichs-Operatoren sind nicht Verbindungsabhängig sondern IMHO auf der DB verankert.BTW: Im Management Studio fäherst Du mit einem .NET Connector, oder Native (OLEDB). ODBC ist was ganz anderes.
-
Martin Richter schrieb:
Bist Du da sicher?
Ich kann das so nicht bestätigen. Die Vergleichs-Operatoren sind nicht Verbindungsabhängig sondern IMHO auf der DB verankert.BTW: Im Management Studio fäherst Du mit einem .NET Connector, oder Native (OLEDB). ODBC ist was ganz anderes.
Naja, es verhält sich so. Ich weiß, dass das Managementstudio (in meinem Fall) mit OLEDB arbeitet. In der Datenbank existiert ein Datensatz, der im Feld Benutzerkuerzel den Wert AM hat. Ein "SELECT * FROM [dbo].[benutzer] WHERE Kuerzel = 'am' liefert mir im Managementstudio auch den Datensatz mit AM. Ebenso führen die Angaben 'Am', 'aM' und natürlich 'AM' zum Ziel. Packe ich das jetzt in einen CSrting und übergebe den der Open-Methode (oder modifiziere alternativ m_strFilter), so führt exakt nur 'AM' zur richtigen Selektion. Allgemein unterscheidet ja SQL da scheinbar nicht zwischen Groß- und Kleinschreibung, die Datensatzklasse (oder der Konnektor) schon. Beim Verbinden kommt noch folgendes:
Warning: ODBC Success With Info, Der Datenbankkontext wurde auf 'Authentifizierung' geändert. State:01000,Native:5701,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] Die Spracheneinstellung wurde auf Deutsch geändert. State:01000,Native:5703,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] DBMS: Microsoft SQL Server Version: 09.00.4053 ODBC Driver Manager Version: 03.52.0000
-
Ich glaub ich habe den Fehler. Ich öffne eine Satzgruppe durch Auswahl eines Filters. Danach habe ich allerdings noch eine eigene Suchfunktion, die die Treffermenge auf eventuelle Dopplungen durchsucht und dort wird ein direkter Vergleich zweier CString-Objekte vorgenommen, der dann selbstverständlich fehlschlägt.
Allerdings stellt sich mir noch eine Frage: wie kann man die Anzahl der Datensätze ohne nochmals durch die gesamte Menge zu interieren, bestimmen? Ist GetRecordCount() eine Möglichkeit wenn man nach einem eindeutigen (also nur einmal oder keinmal vorkommenden) Wert sucht?