Frage von Hadesz, 97

Csharp und mysql?

Guten Tag, ich arbeite an einem Projekt und hier hab ich eine Funktion für einen Button Registrieren,jetzt soll aber in der MessageBox die letzte id angezeigt werden die in der Datenbank ist, hab dort ein auto_increment,

Weiß jetzt leider nicht mehr weiter

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Orsovai, 51

Was genau fehlt Dir? Was nutzt Du? ADO.Net oder Entity? Weißt Du überhaupt wie man grundsätzlich in einer Datenbank liest?

Kommentar von Orsovai ,

Ups, habe jetzt erst das Bild gesehen.

Setze ein erneutes SQL Statement ab "select max(ID) from Tabelle"; einen neuen Reader und da hast Dus.

Kommentar von Hadesz ,

Ich programmiere mit C#, und meine Datenbank liegt auf MySql Workbench, und in einer Datenbank zeigt man die letzte id mit Last_insert_id(); doch irgendwie will es in mysql nicht so klappen

Mfg :) 

Kommentar von CrystalixXx ,

Du solltest die Verbindung am Ende wieder schließen und nicht klonen (.Close statt .Clone).

Alternativ kannst du auch das Using-Statement verwenden, dann geschieht das Schließen und Freigeben automatisch.

Kommentar von Orsovai ,

Okay :)

Versuch mal das SQL Query zuerst auszuführen mittels ExecuteNonQuery und danach mit dem Reader zu lesen.

Kommentar von Orsovai ,

So sollte es eigentlich klappen:

 static void Main()
{
string qry = "select Last_insert_ID() from Deine Tabelle;";
MySqlConnection con = new MySqlConnection("ConnectionString");
MySqlCommand cmd = new MySqlCommand(qry,con);

cmd.ExecuteNonQuery();

MySqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
System.Windows.Forms.MessageBox.Show(String.Format("Your ID is {0}", reader.GetInt16(0)));
}

}
Kommentar von Hadesz ,

Danke euch, werde es gleich ausprobieren :)

Kommentar von Hadesz ,

Leider klappt es nicht, gibt in der MessageBox nur das aus, was ihm vorgeschrieben ist, und zwar dieses Your ID is {0}

Kommentar von Hadesz ,

So, mit Last_insert_id() hat es nicht funktioniert, hab es mit select max(id) from tabelle; gemacht und es funktioniert wundervoll. dankö

Kommentar von Orsovai ,

Das ist seltsam, eigentlich sollte es funktionieren. Mit max(ID) besteht eben die Gefahr, dass die letzte ID nicht die größte ist vor allem wen von mehreren Applikationen aus auf die DB zugegriffen wird oder sogar händisch daran gearbeitet wird.

Kommentar von Hadesz ,

Aber wenn ich Auto_Increment drine habe, und er ja dann die größte ID hinzufügt mit dem Klick, dann gibt er ja in der MessageBox ja die richtigie ID raus. Das wollte ich erstmal erreichen.

Kommentar von Orsovai ,

Das schon ja. Aber stell Dir mal vor, Du löscht Datensatz 10. Autoinkrement fügt dann zwar ganz unten den nächsten Datensatz ein, aber theoretisch könnte jetzt auch ein Datensatz mit der ID 10 hinzugefügt werden. Der wäre dann eigentlich Last_Insert, ist aber nicht das Maximum.

Für Deinen spezifischen Zweck passt das aber.

Kommentar von Hadesz ,

Genau. Du sagst alles richtig, ich habe halt eine DB-App mit Benutzerverwaltung programmiert, 1.Login Fenster mit User und pw, falls nicht vorhanden, dann 0. Registrieren (sein username und pw wird mit insert into in die Tabelle hinzugefügt) wenn der user auf erstellen klickt kommt ein Fenster mit info seiner ID, dann kommt er wieder zur 1. Login Fenster, logt sich mit den Daten ein, falls Die Daten gleich sind, kommt er in das 2. Edit Fenster wo dort die DB Tabelle angezeigt wird, und paar Buttons mit "hinzufügen" "ändern" "löschen" und hinzufügen arbeitet genau so mit auto_inc, das heißt das man gar nicht auf die ID 10 die man gelöscht hat kommen kann.

Antwort
von subhIQ, 54

Mit mysqli_insert_id bekommst du die letzte erzeugte ID

Kommentar von Hadesz ,

Jagut, aber wie programmiere ich es denn, ich dachte es wäre für php gedacht

Kommentar von subhIQ ,
MySqlCommand dbcmd = _conn.CreateCommand();
dbcmd.CommandText = sqlCommandString;
dbcmd.ExecuteNonQuery();
long imageId = dbcmd.LastInsertedId;

Keine passende Antwort gefunden?

Fragen Sie die Community