LIKE 'test' liefert andere Ergebnisse als LIKE 'TEST', ODBC + csv , warum?

24/06/2009 - 11:28 von Michael Schmitz | Report spam
Hallo NG,

ich habe hier eine CSV Liste die ich folgendermaßen öffne:

OdbcConnection con = new OdbcConnection(@"Driver={Microsoft Text Driver
(*.txt; *.csv)};Dbq=C:\test;Extensions=asc,csv,tab,txt");
con.Open();
OdbcDataAdapter adap = new OdbcDataAdapter("select spalte1, spalte2 from
[test.csv] where splate 1 LIKE 'test%'", con);

DataSet ds = new DataSet();
adap.Fill(ds);
this.dataGridView1.DataSource = ds;

Jetzt bin ich es eigentlich vom SQL Server gewohnt das solche LIKE ausdrücke
nicht case sensitive sind,
alslo LIKE 'TEST%' und LIKE 'test%' werfen das gleiche Ergebnis.

In der obigen Konstellation ist es aber anscheinend nicht egal ob groß oder
Kleinschreibung im Suchbegriff ist.
Wie stell ich es an das Groß und Kleinschreibung bei ODBC auch ignoriert
wird?

TIA!

Gruß

Michael
 

Lesen sie die antworten

#1 Elmar Boye
24/06/2009 - 12:27 | Warnen spam
Hallo Michael,

Michael Schmitz schrieb:
OdbcConnection con = new OdbcConnection(@"Driver={Microsoft Text Driver
(*.txt; *.csv)};Dbq=C:\test;Extensions=asc,csv,tab,txt");
con.Open();
OdbcDataAdapter adap = new OdbcDataAdapter("select spalte1, spalte2 from
[test.csv] where splate 1 LIKE 'test%'", con);

DataSet ds = new DataSet();
adap.Fill(ds);
this.dataGridView1.DataSource = ds;

Jetzt bin ich es eigentlich vom SQL Server gewohnt das solche LIKE ausdrücke
nicht case sensitive sind,
alslo LIKE 'TEST%' und LIKE 'test%' werfen das gleiche Ergebnis.



Naja, beim SQL Server hàngt sehr wohl vom gewàhlten Zeichensatz ab.

Bei der Jet gibt es aber eigentlich nur Vergleiche ohne Groß/Kleinschreibung,
unabhàngig davon ob ODBC, OleDb oder eine andere Technik verwendet wird:
http://support.microsoft.com/defaul...kb/244693/
"How To Perform a Case-Sensitive JOIN Through Microsoft Jet"

allerdings spielt der Zeichensatz immer auch eine Rolle,
und sollte mit angegeben werden, da ansonsten der Wert aus
der Registry entnommen wird.

Beachte aber das der Muster-Vergleich bei der Jet in Urform
mit "*" und "_" und nicht mit "%" bzw. "_" erfolgte.
Günstiger ist es im allgemeinen der OleDb Treiber zu verwenden,
der die aus SQL Server bekannten Platzhalter verwendet.

Ein Beitrag aus dieser Gruppe:
http://groups.google.de/group/micro...e1f19b15fe
der weitere Dinge zeigt.

Für das DataSet/DataTable wiederum gelten die Einstellung dort
in Verbindung mit der eingestellten Kultur.

Gruß Elmar

Ähnliche fragen