Heyho,
ich bin ein kompletter Neueinsteiger in C#, und beschäftige mich auch eher mit PHP... Ich wollte mir dennoch gerne ein Programm schreiben, bei dem ich einfach Spiele in eine lokale Datenbank (mdb) eintragen kann.
Das Formular und die Abfrage steht soweit, nur das Eintragen der Spiele macht mir noch Probleme. 8o
Der Code ist dieser:
DataRow newGamesRow = this.database1DataSet.Tables["games"].NewRow();
newGamesRow["game_title"] = title;
newGamesRow["game_platform"] = game_platform;
this.database1DataSet.Tables["games"].Rows.Add(newGamesRow);
// Save the new row to the database
this.gamesTableAdapter.Update(this.database1DataSet.games);
try
{
this.Validate();
this.gamesBindingSource.EndEdit();
this.gamesTableAdapter.Update(this.database1DataSet.games);
MessageBox.Show("Update successful");
this.Close();
Form1 f1 = new Form1();
f1.Refresh();
}
catch (System.Exception)
{
MessageBox.Show("Update failed");
}
Leider wird der Eintrag nicht gespeichert. Eine Fehlermeldung bekomme ich nicht.
Bei den Variablen title und game_platform wird garantiert ein Wert übergeben. Die Tabelle selbst besteht aus den Spalten id, title und game_platform, wobei id einen PRIMARY_KEY mit IDENTITY hat.
Ich freue mich über Lösungsvorschläge. 🙂
Liebe Grüße
saitho
Fehlt nicht der .AcceptChanges() -Aufruf?
Wie dem auch sei, Inserting and Updating data to MDB
kann dir eventualiter helfen.
Gruß..
-3r0rXx
'Tis not too late to seek a newer world.
Hallo saitho,
wenn dus gut machen willst, versuche mdb zu vermeiden und benutze irgendwas andres, nur nicht Access 😉. Ms Server compact beispielsweise.
Dann schau dir das Entity Framework und das UnitOfWork-Repository-Pattern an.
Habe in UnitOfWok-Structure by Offering.Solutions (with Example-Solution) darüber gebloggt.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Hallo Talon,
bei MS Server Compact braucht man ebenso keinen Server einrichten. Wenn mich nicht alles täuscht, braucht man zu dem SQlite noch eine 3rd-Party-Lib, die aber afaik sehr gut dokumentiert ist und man gute Beispiele im Netz findet.
Jedenfalls lässt sich mit beiden Lösungswegen ein gutes Ergebnis erzielen.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Oder LocalDb
Ich bin mir nicht ganz sicher, aber ich meine, es wird nur .NET 4.0.2 oder neuer benötigt.
Außerdem ist es echt toll in VS2013 integriert, es lief alles sehr einfach ab und hatte ungefähr den Komplexionsgrad vom Erstellen einer simplen Code-Datei.
Zu SQLite:
Die Doku ist echt gut, das muss man schon zugeben. Ich würde glatt sagen, dass die besser ist, als das, was ich bisher bei Microsoft so gesehen habe. Mir gefällt z.B. die Darstellung der unterstützten SQL-Befehle sehr gut.
Allerdings habe ich es nicht geschafft, dass SQLite und EntityFramework 6.x zusammen arbeiten. Mit 5.x funktioniert es, aber nicht 6.x
Aus dem Grund verwende ich jetzt doch LocalDb und bin bisher zufrieden. Testen konnte ich meine erste Anwendung mit LocalDb aber noch nicht, die steckt noch in den Kinderschuhen. Einzig das Datenbank-Repository habe ich lokal getestet und das lief komplett problemlos.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
LocalDB erfordert die Installation der LocalDB, und das ist vom Umfang her etwa mit dem SqlServer Express vergleichbar.
Und wenn man SQLite benutzen will und weis das man dabei bleibt, wäre eher SQLite-Net mit den Extensions zu empfehlen.
An Komfort und Geschwindikeit kommt EF nicht ran.
ich deinen code etwas gekürzt, war vieles dabei was du für diesen fall nicht brauchst.
Ich habs nicht gestestet, würd ich aber machen wenn du dden gessmten code sendest.
Odereben dein Project so abspeckst, dass du hier was absetzten kanst, was man leicht in ein testproject übernehmen kann.
DataRow newGamesRow = this.database1DataSet.Tables["games"].NewRow();
newGamesRow["game_title"] = title;
newGamesRow["game_platform"] = game_platform;
this.database1DataSet.Tables["games"].Rows.Add(newGamesRow);
// Save the new row to the database
try
{
this.gamesTableAdapter.Update(this.database1DataSet.games);
MessageBox.Show("Update successful");
this.Close();
}
catch (System.Exception)
{
MessageBox.Show("Update failed");
}