verschoben aus Web-Technologien, da es sich nicht um ein web-spezifisches Problem handelt.
verwendetes Datenbanksystem: Access (?)
Hallo,ich habe bisher alle Daten in Dateien zwischengespeichert und mache nun erste Versuche mit Datenbanken in meiner ASP.NET Anwendung.
Dazu habe ich einfach eine Access Tabelle angelegt und ins Projekt eingefügt.
(city.mdb)
Einiges Funktioniert schon, einiges aber auch nicht.
Meine Mini Tabelle sieht so aus:
Spalten: ID und STRING
und eine Reihe: FTDELTAGE(ID) und 100(STRING)
Also pubseinfach.
Jetzt steht also in der Reihe FTDELTAGE der Wert 100 drin.
Diesen Wert möchte ich nun ändern, per UPDATE Befehl, das sieht so aus:
string neuBerTage= txtNeuBerTage.Text;
try
{
OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|city.mdb");
OleDbCommand myComm = new OleDbCommand("UPDATE city SET STRING=@neuBerTage WHERE ID=FTDELTAGE", myConn);
myConn.Open();
myComm.ExecuteNonQuery();
myConn.Close();
}
catch (Exception ex)
{
string gmess = ex.Message;
}
Also der UPDATE Befehl lautet also:
UPDATE city SET STRING=@neuBerTage WHERE ID=FTDELTAGE
Die Fehlermeldung lautet: "Fehler im UPDATE Befehl."
Ich habe ihn schon tausendmal geändert und auch sogar auf meine Datenbank im www, per PHPmyAdmin die tabelle nachgebaut und den Befehl übernommen: Gleicher Fehler.
Was ist also an diesem simplen Befehl falsch?
Danke
Hallo schuppsl,
versuchs mal so:
OleDbCommand myComm = new OleDbCommand("UPDATE city SET STRING='"+@neuBerTage+"' WHERE ID='FTDELTAGE'", myConn);
Hi, danke.
Leider diesselbe Fehlermeldung: > Fehlermeldung:
Syntaxfehler in UPDATE-Anweisung.
EDIT: habs herausgefunden.
STRING ist natürlich ein reserviertes Wort und darf nicht verwendet werden. 😦
EDIT: Ist eigentlich sinnvoll wenige Daten in einer DB zu speichern, oder sind da doch Textdateien sinnvoller?
@myUnderTakeR:
Das ist falsch.
@schuppsl:
Du solltest einfach verstehen was du machst und nicht herumprobieren.
string neuBerTage= txtNeuBerTage.Text;
try
{
using( OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|city.mdb"))
OleDbCommand myComm = new OleDbCommand("UPDATE city SET [STRING]=? WHERE ID=?", myConn);
myComm.Parameters.AddWithValue("@neuBerTage",neuBerTage);
myComm.Parameters.AddWithValue("@FTDELTAGE","FTDELTAGE");
myConn.Open();
myComm.ExecuteNonQuery();
}
}
catch (Exception ex)
{
//Vernünftiges Exceptionmanagement
}
Hallo,
Wenn Spaltennamen SQL-Keywords entsprechen, kann man den Spaltennamen in eckige Klammern setzen, dann wird es nicht mehr als Keyword erkannt, also hier [STRING]
Wenn man es selbst in der Hand hat, sollte man sowas aber tunlichst vermeiden
@myUnderTaker
Schau Dir mal den Beitrag von FZelle an. Zur Erkläriung warum Dein Vorschlag falsch ist:
Das ist anfällig für SQL-Injection und somit hochgradig gefährlich!
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
@myUnderTakeR:
Das ist falsch.
Aha danke für die Information, da bekommt man ja richtig Lust nochmal zu versuchen jemanden zu helfen.
Zur Erkläriung warum Dein Vorschlag falsch ist:
Das ist anfällig für SQL-Injection und somit hochgradig gefährlich!
Gut das es hier auch noch Mitglieder gibt, die nicht alles, auf jedem Gebiet, für selbstverständlich nehmen und als bekannt vorraussetzen, sondern auf eine nette Weise auf Fehler hinweisen und sogar Anmerkungen dazu geben, was daran kritisch ist.
Aber dann sollte doch wenigstens das mdb-File mit einem Passwort geschützt werden oder? Sonst kann man die Eingabe soviel vor Injection schützen, wie man will.
Hallo,
Aber dann sollte doch wenigstens das mdb-File mit einem Passwort geschützt werden oder? Sonst kann man die Eingabe soviel vor Injection schützen, wie man will.
Naja, wir reden ja hier von einer Webanwendung. Dabei liegt die DB auf dem Server und ist für den Benutzer nicht direkt zugänglich, nur die Serveranwendung kann darauf zugreifen (es sei denn jemand sitzt direkt am Server).
Der Parameter kommt aber vermutlich vom Client, und mit einem präparierten Statement könnte der Benutzer über SQL-Injection belibig viel Unsinn treiben. Das gilt es zu verhindern.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
@myUnderTakeR:
Aha danke für die Information, da bekommt man ja richtig Lust nochmal zu versuchen jemanden zu helfen.
Helfen würde aber bedeuten das Du weist wie man es machen sollte, das sieht in deinem Text aber eher nicht so aus.
Vorsorglich, bevor du dich da in etwas reinsteigerst:
[Artikelserie] Parameter von SQL Befehlen
Hallo FZelle,
danke für den Artiel und keine Sorge, dass ich mich in irgendetwas reinsteigere - ich wurde ja schon davon überzeugt, dass genannter Weg nicht der Richtige ist.
Wie bereits gesagt, habe ich versucht jemandem besten Gewissens zu helfen. Das ich damit auf dem Holzweg war, wurde mir ja auch erst bewusst, als ihr mich darauf hingewiesen habt.
Trotzdem finde ich, dass das Board einen ziemlich guten Ruf hat, was die Hilfsbereitschaft, Kommunikation und den Ton untereinander angeht und sowas bin ich hier eben nicht gewöhnt. Wäre halt schön, wenn du dein Wissen und deine Erfahrung mit uns Anderen teilen würdest, anstatt jedem erstmal einen ordentlich Schuß vor den Bug zu verpassen, aber das Leben ist kein Wunschkonzert 😃
OK - damit soll wieder Ende dieser Diskrepanz sein. Danke.