Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SQL in C# nicht wirklich möglich?
VanKurt
myCSharp.de - Member



Dabei seit:
Beiträge: 56

Themenstarter:

SQL in C# nicht wirklich möglich?

beantworten | zitieren | melden

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! :-D



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();
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

Verwende mal % als Platzhalter

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

Gruß Jörg
private Nachricht | Beiträge des Benutzers
VanKurt
myCSharp.de - Member



Dabei seit:
Beiträge: 56

Themenstarter:

beantworten | zitieren | melden

Wow, das hat tatsächlich funktioniert :-D
So einfach =)

Danke!
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10.000

beantworten | zitieren | melden

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

Suche mal nach Sql Injection
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

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

Jörg
private Nachricht | Beiträge des Benutzers