Autor Beitrag
Dabra
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 30.05.14 22:52 
Hallo User der Entwickler-Ecke,

habe wieder einmal ein Verständnisproblem.

Möchte ein Adressbuch schreiben und stehe nun vor der Frage wie ich die Daten speichern kann.

1. Frage
Habe bisher alles mit BinaryFormatter gespeichert dort verstehe ich leider nicht warum ich nur "public" Variablen speichern kann. Und ich habe gelernt das ich alles auf "private" setzen soll um Fehler zu vermeiden.

2. Frage
Verstehe das System Datenbank mit Objektorientierten Programmierung nicht ganz. Lese ich die Strings aus der Datenbank ein und erzeuge dann daraus meine Objekte (also: DB => String => neues Objekt => List<T>) oder wie ist da der Grundsätzliche Weg?


Es geht mir nur um die Logik dahinter. Die Befehle usw. finde ich selbst verstehe nur nicht den Sinn dahinter und welche Methode ich verwenden sollte.

Vielen Vielen Danke für eure Hilfe
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 30.05.14 23:27 
1. Frage:

Du kannst private Member serialisieren, siehe hier.
Aber warum bitte alles private um Fehler zu vermeiden?

Ja, es ist sinnvoll, alles als private zu deklarieren, was nach Außen hin nicht sichtbar sein soll, aber das gilt längst nicht für alles.
Ok, Felder mache ich fast immer privat, höchstens mal protected, aber in der Regel nutze ich immer Properties um das genau fest legen zu können, wie die Werte geschrieben werden.
Da kann z.B. auch nur der Set-Accessor private sein, der Inhalt ist nach Außen aber trotzdem verfügbar.


2. Frage:

Bei relationalen Datenbanken liegen die Daten in Tabellen.
Eine Tabelle hat dabei Spalten und jede Spalte hat neben Namen noch einen Typ und ein paar weitere Informationen, wie z.B. ob der Wert NULL sein darf.

In der Regel schreibt man dann Klassen, die das gleiche Schema haben, wie die Tabelle (Property entspricht Column) und jedes Objekt ist dann eine Datenzeile.
Sowas wie Vererbung lassen sich aber nur über Umwege einrichten, es gibt aber auch Datenbanksysteme, die objektorientierung unterstützen, bloß habe ich noch keines genutzt.


Bei einem Adressbuch würde ich z.B. diese Tabellen erstellen:

Person
- Id: Integer
- FirstName: NVarChar(20)
- LastName: NVarChar(20)
- Birthday: DateTime

Und dazu dann noch Informationen für Adresse, etc. in anderen Tabellen.

Das jetzt genauer zu beschreiben würde aber vermutlich den Ramen sprengen, es gibt aber jede Menge Quellen im Internet, die weiter helfen. Vorne weg natürlich die msdn-Doku, die hat auch einige Tutorials, unter anderem auch zu Datenbanken.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 31.05.14 00:40 
Der BinaryFormatter serialisiert das ganze binär und macht ganz grob gesagt ein Speicherabbild. Dem ist eigentlich egal ob da was privat oder als öffentlich deklariert ist. Der beachtet die Klassenoberfläche eh nicht wirklich. Bist du dir sicher das du vom BinaryFormatter sprichst?
Dabra Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Sa 31.05.14 19:15 
Vielen vielen dank schon mal an beide für die schnelle Hilfe.

@Palladin007
Also lese ich die Daten aus der Datenbank in einen String und erstelle aus diesen Daten meine Objekte?

@Ralf Jansen
Habe es gerade nochmal nachgeschaut. Du hast Recht es werden auch private Daten gespeichert :( weiß nicht warum ich darauf komme oder warum es nicht ging.

Und nochmal vielen vielen Dank das ihr euch zeit nehmt mir zu helfen. Komme da mit der Logik nicht ganz weiter.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 31.05.14 22:23 
Wie genau der Zugriff auf die Datenbank funktioniert, kann ich dir nicht sagen, aber dafür gibt es APIs, die das leicht ermöglichen und z.B. auch OR-Mapper, den Zugriff noch mehr vereinfachen.

Wenn du low level SQL an die Datenbank schickst und dabei die API nutzt, bekommst du normalerweise ein Objekt vom repräsentativen .Net-Typ geliefert. Hast du Text-Werte, bekommst du String, hast du Date, bekommst du DateTime. Bei BLOB bekommst du glaube ein byte-Array.

Seit Microsoft die Unterstützung von SqlCe in Visual Studio eingestellt hat, favorisiere ich SQLite.
Dazu gibt es auch eine recht gute Doku und Unterstützung für LINQ to SQL und dem Entity-Framework. Es soll auch eine Unterstützung für Visual-Studio geben, ausprobiert habe ich es aber noch nicht, werde ich aber bald.

Google einfach SQLite, es gibt mehr als genug Quellen.
Außerdem gibt es noch das Tool SQLite Administrator für SQLite.


Zusätzlich gibt es dann natürlich noch andere Datenbank-Systeme. Der SQL-Server ist so ein Beispiel, die Express-Version ist kostenlos, aber so oder so fordert das einen Server. Die SQL-Compact (SqlCe) Version dafür liegt in einer einzigen Datei und bleibt lokal, aber dafür hat Microsoft ja die Unterstützung in Visual Studio eingestellt (warum auch immer).

Dann gibt es noch Access und Excel, beides kann als Datenbank angesprochen werden. Beide würde ich aber nicht als Datenbank verwenden, obwohl es geht.


PS:

Ich muss hinzu fügen, dass es bei dem Tool SQLite Administrator scheinbar keine Möglichkeit gibt, in der GUI Fremdschlüssel-Beziehungen einzustellen. Zumindest habe ich sie nicht gefunde.
Allgemein fehlen einige Features von SQLite. Das könnte man angesichts des Umfangs ja verschmerzen, aber die Beziehungen sind dann doch recht wichtig.