Laden...

SQL in C# nicht wirklich möglich?

Letzter Beitrag vor 17 Jahren 5 Posts 1.913 Views
SQL in C# nicht wirklich möglich?

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

  1. 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).

  2. 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

Wow, das hat tatsächlich funktioniert 😁
So einfach =)

Danke!

Vorallem benutze niemals den SqlString für Parameter, sondern immer die
ParameterCollection.

Suche mal nach Sql Injection

Da hat FZelle recht 🙂
Falls Du es noch nicht gehört hast - mal auf Wikipedia nachschauen.

Jörg