Chirin Geschrieben 1. Dezember 2010 Geschrieben 1. Dezember 2010 Hallo, habe per C# und MySQL folgende Syntax: Problem selbst: string com = "Insert Into T_Event (L_ID, E_Date, E_Uhr, U_ID, E_Kommentar, EVS_ID) " + "Values ('" + cb_E_loc.SelectedIndex + "', '" + tb_E_Datum.Text + "', '" + cb_E_Uhrzeit.Text + "', " + mainUser.U_ID + ", '" + tb_E_Kommentar.Text + "', " + cb_E_Status.SelectedIndex + ")"; res = dbcon.DB_Insert(com); Event_insertPosition(res); // Eintragen der Position dbcon.DB_Insert public static long DB_Insert(string com_str) { long erg = 0; MySqlCommand command = connection.CreateCommand(); command.CommandText = com_str; command.Connection.Open(); erg = command.ExecuteNonQuery(); connection.Close(); return erg; } res sollte eigentlich die aktuelle Event_ID aus der Tabelle T_Event zurückgeben (AutoIncrement-Primärschlüssel), tatsächlich kommt nur '1' raus, bei egal welchem Datensatz. Leider weiss ich nicht, wo hier momentan das Problem liegen könnte. Zitieren
Servior Geschrieben 1. Dezember 2010 Geschrieben 1. Dezember 2010 Was genau soll bei dir die Event_ID sein? Laut meinem Wissen, welches durch Google nur bestätigt wird, gibt ExecuteNonQuery() die anzahl Zeilen zurück die von dem Statement betroffen waren. Da du nur einen Eintrag hinzufügst ist das Ergebnis somit auch die eins. Zitieren
Chirin Geschrieben 1. Dezember 2010 Autor Geschrieben 1. Dezember 2010 (bearbeitet) die event-id soll die einmalige id des events zurückgeben. event = datensatz, der eigenschaften L_ID usw enthält da die event-id bzw das event später weiter verwendet wird, ist das somit das identifikationsmerkmal der user trägt ein event ein und liest es später wieder aus. die event_id wird dauerhaft gespeichert. vorstellbar wie eine artikelnummer für artikel in einem bestellsystem da aber nun vorher durchaus event_id 151 existieren kann und das einzutragende event bzw das eben eingetragene event die nummer 152 bekommt, benötige ich eben genau diese ID auf grund einer hohen nutzungswahrscheinlichkeit weiss ich nicht, ob es sinnvoll ist, einfach die id der letzten zeile zu lesen Bearbeitet 1. Dezember 2010 von Chirin Zitieren
Servior Geschrieben 1. Dezember 2010 Geschrieben 1. Dezember 2010 Versuchs mal mit einem "SELECT last_insert_id()" nach dem Insert und ExecuteScalar() anstatt ExecuteNonQuery. Zitieren
lbm1305 Geschrieben 1. Dezember 2010 Geschrieben 1. Dezember 2010 (bearbeitet) Ich würde die ID bereits beim Anlegen des Events generieren lassen. Möglich wäre hier eine GUID. EDIT: Da MySQL diesen Datentyp nicht kennt, wäre hier varchar(36) möglich. Bearbeitet 1. Dezember 2010 von lbm1305 Zitieren
lilith2k3 Geschrieben 1. Dezember 2010 Geschrieben 1. Dezember 2010 string com = "Insert Into T_Event (L_ID, E_Date, E_Uhr, U_ID, E_Kommentar, EVS_ID) " + "Values ('" + cb_E_loc.SelectedIndex + "', '" + tb_E_Datum.Text + "', '" + cb_E_Uhrzeit.Text + "', " + mainUser.U_ID + ", '" + tb_E_Kommentar.Text + "', " + cb_E_Status.SelectedIndex + ")";[/PHP] Hat zwar nichts mit dem Thema zu tun... Aber: Warum benutzt Du keinen Formatstring? Ist zum einen effektiver, [PHP] string insertString = string.Format("Insert Into T_Event (L_ID, E_Date, E_Uhr, U_ID, E_Kommentar, EVS_ID) Values ('{0}','{1}','{2}','{3}','{4}','{5}')", cb_E_loc.SelectedIndex, tb_E_Datum.Text, cb_E_Uhrzeit.Text, mainUser.U_ID, tb_E_Kommentar.Text, cb_E_Status.SelectedIndex); und vor allem wird für denjenigen, der Deinen Code später mal lesen soll, schneller ersichtlich, dass es sich um eine Mischung aus einem String und entsprechenden Variablen handelt. Auf einen Blick ist zu erkennen, dass hier 6 Variablen an der Zusammenstellung des Strings beteiligt sind. Wer's noch schöner haben will, kann das Ganze auch mit einem StringBuilder bauen und so für jede Variable, die im String landet, eine Zeile mit dem StringBuilder (Methode: AppendFormat) hinzufügen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.