Hallo Leute!
Ich möchte gerne aus einer ACCESS Datenbank Daten einlesen (Code siehe unten). Das Problem dabei ist, dass die SQL-Befehle NUR TEILWEISE ausgeführt werden.
Mit Zahlen alles kein Problem. Ein Befehl wie "SELECT * FROM Adressen WHERE alter > 30;" funktionier tadellos, und der Reader gibt mit alle Datensätze aus, die darauf passen.
Mit einem direkten String-Vergleich geht das auch noch: "SELECT * FROM Adressen WHERE vorname = 'Hans';" liefert auch alle richtigen Datensätze.
AAAAABER:
Sobald ich Wildcards benutze (z.B. "SELECT * FROM Adressen WHERE vorname = 'en';" oder "SELECT * FROM Adressen WHERE vorname Like 'om'" liefert der Reader keine Ergebnisse mehr.
Das komische dabei ist
Wenn der Befehl noch andere Abfragen erhält
(z.B. "SELECT * FROM Adressen WHERE alter > 30 OR vorname = 'en';"),
dann wird nur der Wildcard-Teil weggelassen, der Rest wird korrekt ausgeführt (also alle Datensätze, wo das alter > 30 ist).
Wenn ich EXAKT den selben Befehl in ACCESS ausprobiere, liefert er das Gewünschte Ergebnis.
Bei der SQl-Abfrage scheint SQL also irgendetwas falsch zu machen... Hat jemand das Problem auch schonmal gehabt? Oder habt ihr eine Idee, woran das liegen könnte?
Danke! 😁
Hier noch der Code:
OleDbConnection Myconnection = null;
OleDbDataReader dbReader = null;
string con = "Provider=Microsoft.Jet.OLEDB.4.0; User Id=Admin; Password=; Data Source=Datenbank.mdb";
Myconnection = new OleDbConnection(@con);
Myconnection.Open();
OleDbCommand cmd = Myconnection.CreateCommand();
cmd.CommandText = sqlQueryString;
try
{
dbReader = cmd.ExecuteReader();
}
catch (OleDbException ex)
{
MessageBox.Show("FEHLER!!!");
return;
}
while (dbReader.Read())
{
MessageBox.Show("Hab was gefunden");
}//end while
dbReader.Close();
Myconnection.Close();
Verwende mal % als Platzhalter
"SELECT * FROM Adressen WHERE alter > 30 OR vorname LIKE '%en%'"
Gruß Jörg
Vorallem benutze niemals den SqlString für Parameter, sondern immer die
ParameterCollection.
Suche mal nach Sql Injection