C#: Daten in Datenbank speichern
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
code
dank
darstellung
datenbank
datum
dokumentation
ergebnis
folgendes versuchen
format
message
methode
nachricht
server
setzen
show
spalte
string
syntax
url
versuchen
-
Hallo!
Ich habe zwar dazu schon einen Thread eröffnet, aber kann in diesen nicht mehr schreiben..
Ich schaffe es einfach nicht Daten in eine Datenbank zu speichern... Ich habe testweise versucht ein Pseudo-E-Mail-Programm zu schreiben, wo man Absender, Empänger und Nachricht eingaben kann, dann noch automatisch die Zeit hinzugefügt wird und diese Daten dann in die Datenbank gespeichert werden sollen... Zu diesem Zweck habe ich den MySQL Connector Net 6.5.4 heruntergeladen.
Hier mal der Code (Verbindungsdaten natürlich ersetzt):
public string send(string from, string to, string msg) { string time = DateTime.Now.ToString(); string connectionString = "SERVER=mysql.lima-city.de;" + "DATABASE=db_xxxxxx_x;" + "UID=USERxxxxxx;" + "PASSWORD=xxxxxx;"; MySqlConnection connection = new MySqlConnection(connectionString); try { connection = new MySqlConnection(connectionString); connection.Open(); if (connection.State == ConnectionState.Open) MessageBox.Show("Connection established!", "MySQL Information", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message, "MySQL Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception ex) { MessageBox.Show(ex.Message, "Unknown Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); } string myInsertQuery = "INSERT INTO msg_table(time,from,to,message) VALUES ('" + time + "','" + from + "','" + to + "','" + msg + "')"; MySqlCommand myCommand = new MySqlCommand(myInsertQuery); myCommand.Connection = connection; myCommand.ExecuteNonQuery(); myCommand.Connection.Close(); return "Nachricht gesendet"; }
Wenn ich das Programm ausführe kommt zuerst die Meldung "Connection established", und dann die Fehlermeldung
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from,to,message) VALUES ('23.07.2012 00:36:03','z45z5','efht','asfaff')' at line 1
Weiß jemand woran das liegen kann? Danke im Voraus!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo yorecords,
ich gehe mal schwer davon aus, dass die Datenbank "from" als Spaltenname gar nicht so gerne mag, weil "from" ein SQL Schlüsselwort ist. Versuche mal den Tabellennamen in Backticks zu setzen:
string myInsertQuery = "INSERT INTO msg_table(time,`from`,to,message) " + "VALUES ('" + time + "','" + from + "','" + to + "','" + msg + "')";
-
darkpandemic schrieb:
Hallo yorecords,
ich gehe mal schwer davon aus, dass die Datenbank "from" als Spaltenname gar nicht so gerne mag, weil "from" ein SQL Schlüsselwort ist. Versuche mal den Tabellennamen in Backticks zu setzen:
string myInsertQuery = "INSERT INTO msg_table(time,`from`,to,message) " + "VALUES ('" + time + "','" + from + "','" + to + "','" + msg + "')";
Das hab ich schon versucht, hilft aber leider auch nichts. Ich hatte bei einem anderen Versuch überhaupt andere Namen und es hat auch nicht funktioniert.. -
Hallo yorecords,
unter Umständen mag MySQL Dein Datumsformat nicht. Welcher Datentyp wird den für die Spalte 'time' verwendet?
Du kannst ja mal folgendes versuchen:
string time = DateTime.Now.ToString("s").Replace("T"," ");
Und ich würde versuchen möglichst keine Keywords als Spaltennamen zu verwenden. Eher sowas wie:
transmission_timestamp, sender, receiver, message
Beitrag zuletzt geändert: 24.7.2012 20:42:33 von darkpandemic -
darkpandemic schrieb:
Hallo yorecords,
unter Umständen mag MySQL Dein Datumsformat nicht. Welcher Datentyp wird den für die Spalte 'time' verwendet?
Du kannst ja mal folgendes versuchen:
string time = DateTime.Now.ToString("s").Replace("T"," ");
Und ich würde versuchen möglichst keine Keywords als Spaltennamen zu verwenden. Eher sowas wie:
transmission_timestamp, sender, receiver, message
Danke für deine Antwort!
Das mit dem Ersetzen wird nichts bringen, da kommt kein T drin vor..
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from,to,message) VALUES ('23.07.2012 00:36:03','z45z5','efht','asfaff')' at line 1
Ich werd sobald ich Zeit hab die Spalten noch einmal umbenennen, obwohl ich auch nicht glaube, dass das was hilft. Beim letzten Versuch hatte ich auch andere Spaltennamen.. -
Hallo yorecords,
bei genauerem Hinsehen, wird Dir auffallen, dass das Hinzufügen des Replace() nicht die einzige Änderung war.
Der ToString()-Methode wird "s" als Formatparameter übergeben, was dazu führt, dass Du das Datum in ISO-Darstellung bekommst. Z.B:
Dieses beinhaltet nun ein "T". Wenn Du diese nun durch ein Leerzeichen ersetzt, dann sieht das Ergebnis so aus:2012-07-23T00:36:03
Und das ist genau das Format, dass in der MySQL-Dokumentation durchgängig verwendet wird.2012-07-23 00:36:03
Beitrag zuletzt geändert: 26.7.2012 21:22:25 von darkpandemic -
darkpandemic schrieb:
Hallo yorecords,
bei genauerem Hinsehen, wird Dir auffallen, dass das Hinzufügen des Replace() nicht die einzige Änderung war.
Der ToString()-Methode wird "s" als Formatparameter übergeben, was dazu führt, dass Du das Datum in ISO-Darstellung bekommst. Z.B:
Dieses beinhaltet nun ein "T". Wenn Du diese nun durch ein Leerzeichen ersetzt, dann sieht das Ergebnis so aus:2012-07-23T00:36:03
Und das ist genau das Format, dass in der MySQL-Dokumentation durchgängig verwendet wird.2012-07-23 00:36:03
Oho.. Ich verstehe.. Oke dann werd ich das mal versuchen. Danke!
Edit:
Aaaaaahh.. Ich glaub ich spinne..
Seit ewigen Zeiten probier ich da nun herum und versuche alles.. Kaum bin ich wieder mal halbwegs ausgeschlafen merk ich dass die Spalte 'message' nicht message heißt sondern msg... Das war das ganze Problem...
Trotzdem danke für deine Hilfe!
Edit2:
Obwohl das natürlich auch nicht erklärt warum es vorher nicht funktioniert hat... Dürfe aber ein ähnlicher Fehler gewesen sein..
Wenigstens hab ich daraus gelernt dass ich das nächste Mal bevor ich mich ewig mit einem Problem herumärgere besser einfach einmal ausschlafen sollte.
Beitrag zuletzt geändert: 27.7.2012 18:19:32 von yorecords -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage