Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Suche gut erklärte Erläuterung SQL-Datenbanken C#/Winforms


Emorgaly - Mo 01.08.16 22:34
Titel: Suche gut erklärte Erläuterung SQL-Datenbanken C#/Winforms
Moin zusammen

ich hab mich mal bissel durch Google und hier im forum gelesen
und irgendwie schall ich das mit den daten banken nicht ganz.

ich bekomm die Daten bank erstellt und auch eingestellt.
wenn ich das Projekt via Debbug starte
die Form mit der Daten banke öffne,
Daten eingeben,
Speichere,
schliesse,
und Wieder Öffne ist auch alles noch da.

wenn ich das Projekt aber Stoppe und neustarte ist die daten bank leer.

das steht zwar im Code aber irgendwie macht es nicht das was es soll glaube ich


C#-Quelltext
1:
2:
3:
4:
private void Datenbanktest_Load(object sender, EventArgs e)
        {
            // TODO: Diese Codezeile lädt Daten in die Tabelle "liberyDataSet.Table1". Sie können sie bei Bedarf verschieben oder entfernen.
            this.table1TableAdapter.Fill(this.liberyDataSet.Table1);



lg

pe eine Internet seite die mir den Umgang mit Datenbänken in C#/winforms erklärt (zum selberlesen) nehme ich auch gerne, habe nur leider keine gefunden, (bevorzugt in deutsch)

Moderiert von user profile iconChristian S.: Titel geändert: Tippfehler behoben


Palladin007 - Mo 01.08.16 23:04

Anhand deines Code-Schnipsels lässt sich nichts sagen.
Das ist so, als hättest Du bei einem Auto einen Motor-Schaden und würdest ein Bild von einer Befestigungs-Schraube zeigen. :D


Mir fallen spontan drei recht weit verbreitete Wege ein, mit Datenbanken zu arbeiten:
- Direkt mit SQL arbeiten, sprich mit SqlCommands
- Mit Datasets von ADO.NET
- Mit dem EntityFramework
Von unten nach oben wird es flexibler aber auch umfangreicher und komplizierter.

Was Du davon nutzten solltest, muss von Fall zu Fall entschieden werden, für die meisten Anwendungen und für Anfänger ist das EntityFramework aber ziemlich gut geeignet, weil es sehr viel Arbeit ab nimmt. Allerdings hat man dadurch aber nicht den Lerneffekt, was da eigentlich passiert.


Wenn Du eine zufällige Abdeckung haben willst, dann lies dir das durch:
http://openbook.rheinwerk-verlag.de/visual_csharp_2012/
Reines EntityFramework mit dem Code First-Ansatz wird hier ganz schön erklärt:
http://www.entityframeworktutorial.net/code-first/simple-code-first-example.aspx


Ralf Jansen - Mo 01.08.16 23:20

Zitat:
und irgendwie schall ich das mit den daten banken nicht ganz.


Und leider gibt es da dutzende unterschiedliche Modelle und mindestens eine Handvoll Wege mit denen zu arbeiten. Ohne Details ist dir also eigentlich kaum zu helfen.

Dein Problem klingt allerdings nach einem Klassiker. Wenn du direkt mit einer mdb Datei arbeitest die Teil deines Projektes ist schau dir dir Eigenschaften dieser Datei mal in Visual Studio an.
Da solltest du eine "Copy to Output Directory" Eigenschaft finden. Stell die mal auf "Do not copy" und schau ob sich dein Programm anders verhält. Hintergrund, je nach Einstellung wird die Datenbankdatei in den Ausgabe Ordner deiner Anwendung kopiert. Die dort liegende Datei wird von deiner Anwendung benutzt und wenn du die regelmäßig beim kompilieren überschreibst mit der (unveränderten) Version aus deinem Projekt sind deine Daten natürlich regelmäßig weg.


Emorgaly - Di 02.08.16 02:11

gehn wir das ganz mal von hinten an
vielleicht (wahrscheinlich) denke ich viel zu komlieziert.

ich hab 1500 Worte die kein mensch sich merken kann z.B. "Pedmetalx39742GHZ3t97DDEmeta2"
diesen möchte ich jetzt verständinsvolle Worte anbinden z.B. "Metal"

also wenn ich in einer combobox "Metal" anklicke soll in einer textbox automatisch "Pedmetalx39742GHZ3t97DDEmeta2" stehen. Derzeit nutze ich dafür eine Excel tabelle.

daher war meine Überlegung mit einer datenBank, mit 2 spalten, zu arbeiten.
Spalte1 "Pedmetalx39742GHZ3t97DDEmeta2"
Spalte2 "Metal"

und dann einfach abfragen wenn combobox = Metal dann textbox = "Pedmetalx39742GHZ3t97DDEmeta2".

wenn es eine Möglichkeit gibt, diese interliegent ohne Datenbank zu lösen, als her damit.


Ralf Jansen - Di 02.08.16 14:36

Für eine Tabelle (und die auch nur als Key-Value) braucht man sicher nicht gleich eine ganze Datenbank. Bei der Datenmenge schon gar nicht.
Du kannst auch einfach irgendeine Form von strukturiertem Flatfile nehmen. Da bieten sich dann primär XML oder Json an.

Beispiel mit Json:


Quelltext
1:
2:
3:
4:
[
  { "Key":"Metal", "Value":"Pedmetalx39742GHZ3t97DDEmeta2"},
  { "Key":"Plastik","Value":"DumpPlastikx39742G3t97DDEmeta2"}
]



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
//Definition der darzustellenden Daten
public class Data // Data, Key, Value sind generische Namen du solltest dir passende (fachlich nicht technisch) auf deinen Context abgestimmte ausdenken.
{
    public string Key { get; set; }
    public string Value { get; set; }
}

//Beispiel mit hartcodierten Daten
List<Data> data = new List<Data>()
{
    new Data() { Key = "Metal", Value = "Pedmetalx39742GHZ3t97DDEmeta2" } ,
    new Data() { Key = "Plastik", Value = "DumpPlastikx39742G3t97DDEmeta2" }
};

//Lesen
var jsonSerialiser = new JavaScriptSerializer();
data = jsonSerialiser.Deserialize<List<Data>>(File.ReadAllText(@"C:\MyLovely.json", Encoding.UTF8));

//Schreiben
var jsonSerialiser = new JavaScriptSerializer();
File.WriteAllText(@"C:\MyLovely.json", jsonSerialiser.Serialize(data), Encoding.UTF8);

// binden an die Combobox
comboBox1.DataSource = data.ToList();
comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";

var selection = comboBox1.SelectedValue as string// das Ergebnis wenn "Metal" ausgewählt also "Pedmetalx39742GHZ3t97DDEmeta2"


Palladin007 - Di 02.08.16 14:46

Nicht vergessen:

Den Zugriff schön kapseln, damit man ohne große Probleme auf etwas anderes wie z.B. eine Datenbank umsteigen kann, wenn es mal notwendig werden sollte.