Problem mit Select-Anweisung beim Beenden eines Programmes

Little Caro

Grünschnabel
Hallo,

ich hab gedacht, vllt. könnte mir hier jemand helfen. Ich hab noch nicht viel Zeit gehabt mich mit C# richtig auseinanderzusetzen, und soll aber Daten aus einer Datenbank (Access) auslesen.
Das funktioniert auch ganz toll. Ich kann sie in ein DataGridView einlesen und kann sie auch mit Hilfe eines Kriteriums dass ich aus einer ComboBox habe filtern lassen. Nur kommt bei mir wenn ich das Programm beende folgende Fehlermeldung:

Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Lieferanten_Code ='.

mein Code für den Filternteil sieht bisher so aus:
Code:
  private void CMB_Lfr_Code_SelectedIndexChanged(object sender, EventArgs e)
        {
            string hilfe = this.CMB_Lfr_Code.Text;
            string selectStm = "Select * From Angebote Where"+ 
                                          "Lieferanten_Code = " + hilfe;
            
this.angeboteTableAdapter.Adapter.SelectCommand.CommandText = selectStm;
            this.angeboteTableAdapter.Fill(this.maiDataSet.Angebote);
         }

Außerdem möchte ich, dass man da Zeilen löschen kann oder einen neuen Datensatz anfügen kann.

Ich würde mich über schnelle Antworten freuen.
 
Dieser Fehler der hier ausgelöst wird entsteht durch einen Fehlerhaften SQL Code.
Der SQL Sollte ja wie folgt aussehen:
SQL:
SELECT * FROM Angebote WHERE Lieferanten_Code = 'hilfe';

Wenn du jetzt deine selectStm Variable mal genau anssiehst, siehst du dass 1. nach dem WHERE ein Leerzeichen fehlt, sowie dass der Hilfetext nicht unter Hochkomma steht. Die Hochkommas können nur bei Zahlen, Konstanten-Namen, Funktionen etc. verwendet werden. Für Stringvergleiche musst du sie setzen:
C#:
  private void CMB_Lfr_Code_SelectedIndexChanged(object sender, EventArgs e)
        {
            string hilfe = this.CMB_Lfr_Code.Text;
            string selectStm = "Select * From Angebote Where "+ 
                                          "Lieferanten_Code = '" + hilfe + "'";
            
this.angeboteTableAdapter.Adapter.SelectCommand.CommandText = selectStm;
            this.angeboteTableAdapter.Fill(this.maiDataSet.Angebote);
         }

[Edit]
Aber beachte auch dass diese Methode der String-Verkettung bei SQLs eine große Sicherheitslücke ist. Siehe dir dazu das Theme SQL-Injection an.
 
hey,
danke für deine schnelle Antwort.
Leider hilft die mir nicht weiter weil:
1. das Leerzeichen, hab ich ausversehen beim Bearbeiten im Forum gelöscht, sprich: im C#-Code ist es da und
2. an den Hochkommata liegt es nicht, weil ich das schon versucht habe, dann erhalte ich die Fehlermeldung dass die Datentypen im Kriterienausdruck unverträglich sind.

vllt. ist noch zu erwähnen, dass die ComboBox ebenfalls aus einer SQL-Abfrage gespeist wird.
kann es vllt. sein, dass ich den TableAdapter wieder quasi ausladen/schließen/sonstiges muss beim Programmende?
 
Zuletzt bearbeitet:
Lass dir mal den SQL Code ausgeben (Debugausgabe oder so) und schau dir den Syntax an ob dieser in Ordnung ist.
 
Der SQL-Code stimmt so lange bis ich auf den Button "Programmende" klicke.
Man sieht auch dass er sofort filtert. und auch richtig filtert. Das ist ja das seltsame daran.
 
In welcher Zeile wird dann die Exception genau geworfen? Und was ist die genaue Exceptionausgabe und wie ist der Programmablauf? Mir ist im Moment unklar wo der Fehler genau auftritt.
 
Ich dachte ich hätte mein Problem schon weiter oben erklärt. Aber nun noch einmal:

Fehler tritt hier auf
this.angeboteTableAdapter.Fill(this.maiDataSet.Angebote);
Als Fehlerinformation habe ich diesen Text:
Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Lieferanten_Code ='.

Programmablauf ist very simple:
Programm startet. Beim Start wird das DataGridView mit Hilfe des Wizards gefüllt (ich weiß ich weiß Wizards sind furchtbar. Aber ich sollte es so machen)
Dann habe ich eine ComboBox die ebenfalls an einer anderen Tabelle in der Datenbank aus Access gebunden ist und aus der ich ein Filterkriterium nehme.
Übergabe beim Verändern des Combo-Inhaltes und Filtern in dem gefüllten DataGrid (also Darstellung im DataGrid, klar)
(bis dahin funktioniert alles sehr gut.)
Ende des Progs
und an diesem Punkt erhält man dann den Fehler

Ist es jetzt klar geworden? Was ich bezwecke, will ,etc?
 
ich denke ich weiß jetzt woran es liegen könnte.
ich habe in Access ein Feld, das eine Zahl ist, also ein Integer und wenn ich die ComboBox auslese erhalte ich einen String.
also habe ich das jetzt geändert zu:

string hilfe = this.CMB_Lfr_Code.Text;
int x = 0;
x = Convert.ToInt32(hilfe);
string selectStm = "Select * From Angebote Where Lieferanten_Code = " + x;
this.angeboteTableAdapter.Adapter.SelectCommand.CommandText = selectStm;
this.angeboteTableAdapter.Fill(this.maiDataSet.Angebote);

mit dem smarten Nachteil dass ich beim Beenden folgende Fehlermeldung erhalte weil die Variable hilfe = "" ist.

Format Exception wurde nicht behandelt.
Die Eingabezeichenfolge hat das falsche Format.

Wie schaffe ich es dass beim Beenden die Funktion SelectedIndexChanged nicht ausgeführt wird?
 
Zurück