SQL Datensatz löschen
-
Hallo,
ich habe eine SQL Datenbank... und ich will einen Datensatz daraus löschen, der in ein Textfeld eingegeben wird.
Wenn ich das ganze ausführe... und mir danach noch mal alle Datensätze der entsprechenden Tabelle anzeigen lasse, ist der Datensatz leider immer noch drin.
Ich weiß nicht ganz wo der Fehler liegt, bin sehr neu in C# Programmierung.Greez
Haimiprivate void bT_Buch_zurückgeben (object sender, EventArgs e) { //Textbox resetten Ausgabe.Clear(); Ausgabe.Text = "Rückgabe ausgeführt..."; OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Bibliothek.mdb"); con.Open(); //Löschen nach internet Nr OleDbCommand cmd = new OleDbCommand("DELETE FROM exemplar WHERE internenr = " + tB_Rückgabe.Text + "", con); }
-
Du hast die Lösch-Anweisung nur vorbereitet, aber noch nicht ausgeführt - versuch's mal mit
cmd.ExecuteNoQuery()
.
-
Ahh vielen Dank
...jetzt wird der Datensatz richtig herausgelöscht.
Ich habe noch eine weitere Frage... es funktionieren bei mir keine Abfragen, die mit einer OR-Anweisung erweitert werden.
Das heißt, ich würde z.B. gerne etwas wie dieses hier machen können:OleDbCommand cmd = new OleDbCommand("DELETE FROM exemplar WHERE internenr = " + tB_Rückgabe.Text + "" OR Titel LIKE 'Haus', con);
Doch egal wie ich es in den Befehl hereinschreibe, funktioniert es nicht... geht sowas überhaupt?
-
Eigentlich sollte es funktionieren (zumindest sieht die SQL-Anweisung richtig aus, auch wenn ich nicht weiß, was sich hinter tB_Rückgabe.Text verbirgt).
PS: Ich wußte gar nicht, daß C# Umlaute in Bezeichnern erlaubt.
-
tB_Rückgabe.Text ist ein Textfeld, in das man das Buch eintragen kann, welches man zurückgeben möchte.
Es funktioniert so... nur die OR Abfrage kann ich immer noch nicht umsetzen... es passiert dabei gar nichts...
-
Hast du eventuell Leerzeichen in der Eingabe?
(gerade gesehen: den OR-Teil hast du dort nicht in der SQL-Anfrage - geht das überhaupt durch den Compiler?)
-
Leerzeichen habe ich keine in der Eingabe beim Probieren drinnen gehabt... und iwie geht es durch den Compiler, man kann sogar Dinge einfügen, die in meinen Augen falsch aussehen... das ist komisch...
-
Erstaunlich, was Compiler so alles schlucken - hast du denn mal versucht, die dort gebildete Anweisung einfach nur auszugeben?
PS: Übrigens solltest du dich mal mit SQL-Injektion beschäftigen. Ich hab' selber schon oft genug Fehler beheben müssen, die entstanden sind weil jemand seine SQL-Anweisung so zusammengebaut hat (teilweise war ich's auch selber :D).
-
Hallo haimi,
anstatt
"" OR Titel LIKE 'Haus'
muß es
" OR Titel LIKE 'Haus'"
heißen...
-
Oder einfach String.Format nutzen um das ganze etwas übersichtlicher zu machen.
-
Wie bereit erwähnt: Auf jedenfall Benutzereingaben niemals direkt reinbauen
Nimm lieber parametrisierte Queries:OleDbCommand cmd = new OleDbCommand("DELETE FROM exemplar WHERE (internenr=@bla) OR (Titel LIKE 'Haus')", con); cmd.Parameters.AddWithValue("@bla",tB_Rückgabe.Text); cmd.ExecuteNonQuery();
-
Nur weil's glaub ich noch nicht erwähnt wurde: SQL Connections und Commands usw. sollte man Disposen. Idealerweise über nen "using"-Block.