Hi,
ich wollte mal wieder mit C# anfangen und ne kleine MySQL Anwendung schreiben.
Zum einen bekomm ich immer die Fehlermeldung, das ich in meinem INSERT INTO Query nen Syntax Fehler habe:
try
{
con = new MySql.Data.MySqlClient.MySqlConnection();
con.ConnectionString = conString;
MySql.Data.MySqlClient.MySqlCommand cmd;
cmd = new MySql.Data.MySqlClient.MySqlCommand();
cmd.Connection = con;
con.Open();
string test = "stefan";
cmd.CommandText = "INSERT INTO table VALUES("+test+")";
cmd.ExecuteNonQuery();
MessageBox.Show("Erfolgreich");
}
catch(MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show(ex.Message);
}
zum andern, wieso muss ich jedesmal MySql.Date dafor schrieben? Ich hab doch oben weiter mit using den namespace eingebunden.
using MySql.Data;
Danke für die Hilfe.
Hallo Snoopy,
Bin ich zu Blöd für MySQL ?
Weiss ich nicht !
😉
In deinem SQL-Statement ist ein Fehler. Schau mal hier nach :
http://dev.mysql.com/doc/refman/5.1/de/index.html
Am Anfang schreibe einfach :
using MySql.Data.MySqlClient;
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
selbst diese änderung bringt nichts..
immernoch der gleiche Fehler.
string test = "stefan";
cmd.CommandText = "INSERT INTO table(name) VALUES("+test+")";
ohne die Fehlermeldung vermute ich einfach mal die fehlenden Anführungszeichen im zusammengebastelten SQL-Kommando.
string test = "stefan";
cmd.CommandText = "INSERT INTO table(name) VALUES('"+test+"')";
Edit: dieser Befehl würde in die Tabelle "table" eine Zeile einfügen und den Wert "stefan" in das Feld "name" einsetzen.
die genaue Fehlermeldung lautet:
You habe an error in your SQL syntax; check the manuel that corresponds to your MySQL server version for the right syntax tu usw near 'table(name) VALUES('stefan') at line 1
ich versteh nciht was daran jetzt falsch ist, mein code sieht nun so aus
con.Open();
string test = "stefan";
cmd.CommandText = "INSERT INTO table(name) VALUES('"+test+"')";
cmd.ExecuteNonQuery();
Leerzeichen zwischen 'table' und '(name)' und nach VALUES ?
INSERT INTO table (name) VALUES ('test')
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Vielleicht 😁
Im Manual steht folgendes Beispiel:
mysql> INSERT INTO haustier
-> VALUES ('Puffball','Diane','Hamster','w','1999-03-30',NULL);
und das sieht gar nicht nach insert into table(haustier) ...
aus.
Hi ha ho, jetzt simmer widder froh 🙂
Hallo,
Problem schon gelöst?
Eigentlich reicht meines Erachtens nach schon
Insert into <tableName> (Spalte1) values (test)
tableName = Name der Tabelle
Spalte1 = Name der Spalte der Tabelle
Gruß
table ist ein reserviertes Wort! 😉 Guggst Du: http://dev.mysql.com/doc/refman/5.1/de/reserved-words.html
Hallo!
@SeboStone:
Ich denke mal, dass snoopy das bekannt ist. table ist ein Platzhalter. Genauso wie das erste Feld wohl kaum "spalte1" heißen wird ...
Nobody is perfect. I'm sad, i'm not nobody 🙁
_Original von tom-essen_table ist ein Platzhalter. Genauso wie das erste Feld wohl kaum "spalte1" heißen wird ...
Na wer weiss, ich hatte schon solche Probleme mit reservierten Wörtern. 🙂
Nochmal zum Mitschreiben :
// falsch :
cmd.CommandText = "INSERT INTO table(name) VALUES('"+test+"')";
// richtig :
cmd.CommandText = "INSERT INTO adressen (name) VALUES ('"+test+"')";
Leerzeichen beachten !
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
sehr merkwürdig. Ich starte heute meinen PC und versuche es nochmal auszuführen und es klappt. Mh vielleicht nen Bug von SHarpdevelop 2.2 ?
Naja nun klappt es auf jedenfall. Danke trotzdem.
Hast Du in letzter Zeit irgendwas installiert ohne den Rechner neu zu booten? Kann manchmal passieren, dass ein Neustart notwendig ist, ein Setup das aber nicht fordert.
mh eigentlich nicht..
Aber ich habe ein anderes Problem.
Ich möchte gerne innerhalb einer Methode zweimal Daten von dem MySQL Server mit dem MySqlDataReader object lesen. Doch leider klappt es nur einmal.
der code
MySqlDataReader reader = command.ExecuteReader();
while(reader.read())
{
//verarbeitung
}
reader.close();
command.CommandText = "SELECT * FROM tabelle";
command.ExecuteReader();
while(reader.read())
{
//Verarbeitung
}
mh mein Programm bricht beim beim zweiten "executereader" ab mit der meldung, das auf der Verbindung schon gelesen wird, aber ich hab es doch mti reader.close() geschlossen, oder ist das falsch? Bzw. wie muss ich ihn richtig schließen?
Grüße
Stefan
Das Problem ist genau das, dass der reader geschlossen ist.
Daher kann er nicht mehr lesen, weil er eben geschlossen ist.
MySqlDataReader reader = command.ExecuteReader();
while(reader.read())
{
//verarbeitung
}
reader.close();
command.CommandText = "SELECT * FROM tabelle";
// Du musst dem reader den neuen Command zuweisen:
// ****
reader = command.ExecuteReader();
// ****
while(reader.read())
{
//Verarbeitung
}
lg,
daniel
mh geht immernoch nicht, also ich erhalte diese Fehlermeldung
There is already an open DataReader associated with this Connection which must be closed first.
und der code sieht nun genau so aus:
void MainFormLoad(object sender, EventArgs e)
{
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = m_con;
cmd.CommandText = "SELECT id,name FROM kunden ORDER BY name asc";
MySqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
TreeNode node = new TreeNode();
node.Text = reader.GetValue(1).ToString();
node.Tag = reader.GetValue(0).ToString();
treeView.Nodes.Add(node);
}
reader.Close();
for(int i=0;i<treeView.Nodes.Count;i++)
{
cmd.CommandText = "SELECT name FROM computer WHERE kunden_id = "+treeView.Nodes[i].Tag+" ORDER BY name ASC";
reader = cmd.ExecuteReader();
while(reader.Read())
{
treeView.Nodes[i].Nodes.Add(reader.GetValue(0).ToString());
}
}
}
beim zweiten executeReader bleibt er hängen mit oben genannter Fehlermeldung.
Du schliesst ihn innerhalb der for-Schleife ja auch nicht..
also ich finde, die Fehlermeldung sagt doch alles... oder?
this Connection which must be closed first.
also was wirst du wohl tun müssen? richtig, nach dem reader noch cmd.connection.close() 🙂
lg
lg Lion