Laden...

SQL in C# nicht wirklich möglich?

Erstellt von VanKurt vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.902 Views
V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 17 Jahren
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();

484 Beiträge seit 2006
vor 17 Jahren

Verwende mal % als Platzhalter

"SELECT * FROM Adressen WHERE alter > 30 OR vorname LIKE '%en%'"

Gruß Jörg

V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 17 Jahren

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

Danke!

F
10.010 Beiträge seit 2004
vor 17 Jahren

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

Suche mal nach Sql Injection

484 Beiträge seit 2006
vor 17 Jahren

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

Jörg