[C#]Problem beim updaten einer Datenbankzeile
-
Hi,
ich hab ein kleines Problem: Ich habe eine Datenbankverbindung und update eine Zeile, wie gewohnt doch ich bekomme immer diese Fehlermeldung:
Datentypen in Kriterienausdruck unverträglich
Aber ich hab alles mögliche ausprobiert und es geht einfach nicht!
Fast derselbe Code beimaktualisieren einer anderen Tabell geht wunderbar aber bei diesem Code gehts einfach nicht:try { statement = "UPDATE Kunden SET Kundennummer = '" + textBox1.Text + "' WHERE Kundennummer = '" + t_artikel.number + "' "; cmd = new OdbcCommand(statement, cn); cmd.ExecuteNonQuery(); statement = "UPDATE Kunden SET Name = '" + textBox2.Text + "' WHERE Kundennummer = '" + textBox1.Text + "' "; cmd = new OdbcCommand(statement, cn); cmd.ExecuteNonQuery(); statement = "UPDATE Kunden SET Postleitzahl = '" + textBox3.Text + "' WHERE Kundennummer = '" + textBox1.Text + "' "; cmd = new OdbcCommand(statement, cn); cmd.ExecuteNonQuery(); statement = "UPDATE Kunden SET Straße = '" + textBox4.Text + "' WHERE Kundennummer = '" + textBox1.Text + "' "; cmd = new OdbcCommand(statement, cn); cmd.ExecuteNonQuery(); statement = "UPDATE Kunden SET Telefon = '" + textBox5.Text + "' WHERE Kundennummer = '" + textBox1.Text + "' "; cmd = new OdbcCommand(statement, cn); cmd.ExecuteNonQuery(); statement = "UPDATE Kunden SET EMail = '" + textBox6.Text + "' WHERE Kundennummer = '" + textBox1.Text + "' "; cmd = new OdbcCommand(statement, cn); cmd.ExecuteNonQuery(); statement = "UPDATE Kunden SET Fax = '" + textBox7.Text + "' WHERE Kundennummer = '" + textBox1.Text + "' "; cmd = new OdbcCommand(statement, cn); cmd.ExecuteNonQuery(); } catch (Exception ex) { MessageBox.Show("Error beim updaten der Connection: " + ex.Message); Close(); }
Weiß jemand woran es liegen könnte?
Schonmal vielen dank für jegliche Hilfe
»Trivium«
-
Naja, wie die Fehlermeldung schon sagt, der datentyp mindestens einer Spalte verträgt sich nicht mit dem, was Du reinschreibst. Zur Info, Du schreibt in alle Spalten einen String rein. Aber ohne weitere Kenntnis der Spaltendefinitionen kann man da nicht mehr sagen.
Ach ja, das ganze ist hoffentlich nur Übungscode und soll doch wohl nicht "produktiv" gehen, oder?
-
Ach ja, das ganze ist hoffentlich nur Übungscode und soll doch wohl nicht "produktiv" gehen, oder?
Ja, aber was ist an diesem Code sooo verkehrt?
-
Benutz lieber prepared statements:
OdbcCommand cmd = new OdbcCommand(); cmd.CommandText = "UPDATE tbl SET x=? WHERE y=?"; cmd.Parameters.AddWithValue("@X",aString); cmd.Parameters.AddWithValue("@Y",anInteger); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); cmd.CommandText = "UPDATE tbl2 SET ..."
Damit umgehst du viele Probleme bei Typenumwandlungen etc.
-
Und wieso machst du 10 queries wo einer ausreichen würde?
statement = "UPDATE KUNDEN SET WASWEISSICH1=?, SET WASWEISSICH2=?, ... WHERE WASWEISSICHX=?";
-
Trivium schrieb:
Ach ja, das ganze ist hoffentlich nur Übungscode und soll doch wohl nicht "produktiv" gehen, oder?
Ja, aber was ist an diesem Code sooo verkehrt?
mal abgesehen von dem was die anderen schon gesagt haben...
z.B. diese Zeile:
statement = "UPDATE Kunden SET Kundennummer = '" + textBox1.Text + "' WHERE Kundennummer = '" + t_artikel.number + "' ";
Also entweder änderst Du bestehende Kundennummern, was imho ein design-Fehler im Datenmodel ist oder aber Du machst ein Update für eine Spalte die sich durch das Update nicht ändert...
Außerdem deuted der Code darauf hin das Du die SQL-Commandoes innerhalb einer Form verwendest. Auch keien gute Idee da Forms nicht multithreading-tauglich sind. Solche Aufgaben wie z.B. Zugriffe auf einen datenbank gehören in einen Worker-Thread (oder zumindest ein Workitem des Threadpools).
-
Hi,
ich verwende dafür eine Access Datenbank, allerdings find ich nirgends ne Einstellung mit der ich bei den Spalten Einstellungen angeben kann was für Datentypen dafür vorgesehen sind!
Kann mir jemand helfen?
Schon mal danke im vorraus
»Trivium«
-
Da Du offensichtlich nicht verstanden hast was meine Vorposter hier gesagt haben und Du auch offensichtlich keine Ahnung von SQL hast, solltest Du Dich nochmal ausführlich mit Datenbanken beschäftigen, sonst wird das ganze definitv gar nix!