2016-05-16 5 views
0
OleDbConnection con = new OleDbConnection(constring) 
con.Open() 
cmdstring = "UPDATE table SET date="+DateTime.Parse(txtdate.Text).ToString("dd/MM/yyyy") + " WHERE id = 1" 
OleDbCommand cmd = new OleDbCommand(cmdstring,con) 
cmd.ExecuteNonQuery() 
con.Close() 

Wenn ich versuche, eine Tabelle mit diesem Code in einem meiner Formulare zu aktualisieren, ist es perfekt gemacht. Aber in der anderen Form verwende ich denselben Code, um dieselbe Tabelle und dieselbe Spalte zu aktualisieren, aber ich bekomme einen verwirrenden Fehler. Syntaxfehler (fehlender Operator)C# Zugriff DateTime UPDATE via DateTime.Parse

Beispiel: Datum bei txtbox: 17.1.1987

Datum an dem Fehler: 17.1.198

DateTime.Parse ist in Ordnung. Ich habe versucht, was es zurückgibt. Es gibt 4 Ziffern Jahr zurück. Aber was passiert beim Aktualisieren von Access db?

Grüße ...

+0

Verwendung dieses => "UPDATE Tabelle SET date = CONVERT (datetime‚" + txtdate.Text +" ', 104) WHERE id = 1" –

+0

Sie müssen wahrscheinlich ein Leerzeichen vor WHERE in Ihrem Beispiel. Da Sie im SQL-Code eine SQL-Zeichenfolge eingeben, müssen Sie die endgültige SQL-Anweisung vor der Ausführung auf etwaige Syntaxfehler prüfen. – Alex

+0

Beide Eingaben würden funktionieren, wie Sie uns gezeigt haben. Sie benötigen ein bisschen mehr Informationen. Es wäre nützlich, den gesamten "cmdstring" für den fehlerhaften Fall zu sehen. Davon abgesehen sollten Sie Ihre Abfragen wahrscheinlich parametrisieren. Es ist nicht nur sicherer, es ist auch übersichtlicher und leichter zu verstehen. – Rob

Antwort

1
cmdstring = "UPDATE table SET date='"+DateTime.Parse(txtdate.Text).ToString("dd/MM/yyyy") + "' WHERE id = 1" 

Sie müssen einfache Anführungszeichen vor und nach dem Wert des Datums.

+0

Es ist sehr seltsam. Zuerst dachte ich, ich versuchte es mit Anführungszeichen. Aber es hat jetzt funktioniert. Vielen Dank. –

2

Verwenden Sie immer parametrisierte Abfragen. Besonders wenn Sie mit Daten in Access arbeiten, können Sie in so viele Schwierigkeiten geraten.

DateTime dt; 
    bool canParse = DateTime.TryParseExact(txtdate.Text, 
             "dd/MM/yyyy",CultureInfo.InvariantCulture, 
             DateTimeStyles.None, 
             out dt); 
    if(canParse) 
    { 
     string sQuery = "UPDATE table SET date = @pdate WHERE ID = @pid"; 
     OleDbCommand updateCmd = new OleDbCommand(sQuery, Conn); 
     updateCmd.Parameters.Add("@pdate", OleDbType.Date).Value = dt; 
     updateCmd.Parameters.Add("@pid", OleDbType.Integer).Value = 1; 
     int rowsAffected = updateCmd.ExecuteNonQuery(); 
     /* Use the result from operation for some notification */ 
    } 
+0

Danke. Ich werde das auf Anhieb versuchen. –