Zum Fußzeileninhalt springen
Iron Academy Logo
C#-Anwendung
C#-Anwendung

Andere Kategorien

Ein tiefer Einblick in die C# Textverbindung

Tim Corey
1h 15m 23s

In Lektion 11 von Tim Coreys "C# App Start to Finish"-Serie erklärt Tim, wie man Daten in Textdateien mit einer textbasierten Datenverbindung speichert. Tim beginnt damit, die Zuschauer daran zu erinnern, dass sie in der vorherigen Lektion die SQL-Verbindung eingerichtet und wichtige Bereinigungsaufgaben durchgeführt haben. Jetzt liegt der Fokus auf der Textverbindung, und das Ziel ist klar: die Textverbindung so funktionsfähig machen wie die SQL-Verbindung, sodass das System ein PrizeModel nehmen und es mit seiner ID korrekt zurückgeben kann. Tim betont, dass das Video einen vollständigen Arbeitsablauf für das Speichern, Lesen und Aktualisieren von Daten unter Verwendung von einfachen Textdateien zeigen wird.

Die Lösung — Einrichten der Textverbindung

Tim beginnt damit, den Text Connector im DataAccess-Ordner zu öffnen. Er löscht den Beispielcode und beginnt von Grund auf neu. Er erklärt, dass Textdateien im Gegensatz zu SQL keine intelligenten Datenbankfunktionen wie automatisch inkrementierende IDs bieten. Daher besteht die erste Aufgabe darin, zu entscheiden, wo die Textdateien gespeichert werden sollen.

Tim schlägt ein sauberes Design vor: Speichern Sie jedes Model in seiner eigenen Textdatei. Zum Beispiel wird PrizeModel seine eigene Datei namens PrizeModels.csv haben, während andere Modelle wie MatchupModel jeweils separate Dateien haben. Tim vergleicht diese Struktur mit SQL-Tabellen — jede Datei wird zu einer "Tabelle", die eine Liste dieses Modells enthält. Dies macht Daten einfach zu verwalten und verhindert das Mischen verschiedener Modelltypen.

Die Verbindungszeichenfolge — Datei Pfad speichern

Tim erklärt, dass Sie anstelle eines einzelnen Dateinamens einen Pfad zu dem Ordner speichern, in dem alle Dateien gespeichert werden. Dieser Pfad wird in der app.config unter appSettings platziert. Tim fügt ein neues Schlüssel-Wert-Paar hinzu:

  • Schlüssel: filePath

  • Wert: der Ordnerpfad, in dem die Dateien gespeichert werden

Er betont die Verwendung der korrekten Windows-Syntax und vermeidet es, den Pfad mit einem Schrägstrich zu beenden, da er es vorzieht, den Schrägstrich nur beim Erstellen des vollständigen Dateipfads hinzuzufügen. Diese Konfiguration ist entscheidend, da sie die Anwendung flexibel macht—wenn sich der Speicherort ändert, aktualisieren Sie nur die app.config.

Der Plan — So funktioniert die Textverbindung

Tim skizziert einen klaren Plan zum Speichern eines Preises:

  1. Laden Sie die Textdatei, die alle Preise enthält.

  2. Konvertieren Sie die Textzeilen in eine Liste von PrizeModel.

  3. Finden Sie die höchste ID in der Liste und setzen Sie neue ID = höchste ID + 1.

  4. Fügen Sie das neue Preismodell zur Liste hinzu.

  5. Konvertieren Sie die Liste der Preise zurück in Textzeilen.

  6. Speichern Sie die Liste zurück in die Textdatei und überschreiben Sie die alten Daten.

Tim erklärt, dass Textdateien im Vergleich zu SQL-Datenbanken "dumm" sind. SQL kann IDs automatisch verwalten, aber Textdateien erfordern, dass der Entwickler die Logik manuell implementiert. Aus diesem Grund unterteilt Tim den Prozess in kleinere Methoden, um den Code sauber und wiederverwendbar zu halten.

Eine neue Klasse erstellen — Text Connector Prozessor

Tim erstellt eine neue Klasse namens TextConnectorProcessor. Er platziert sie im DataAccess-Ordner, aber in einem anderen Namensraum, um den Hauptnamensraum nicht zu überfrachten. Tim erklärt, dass Namensräume flexibel sind und angepasst werden können, aber er empfiehlt, sie einfach und sauber zu halten.

Er macht die Klasse public static und beginnt mit dem Aufbau von Hilfsmethoden.

Erweiterungsmethode — Voller Dateipfad

Tim erstellt eine Erweiterungsmethode:

public static string VollerDateipfad(this string fileName)

Diese Methode kombiniert den filePath aus app.config mit dem Dateinamen, um den vollen Dateipfad zu erzeugen. Tim zeigt, wie man ConfigurationManager.AppSettings["filePath"] verwendet und erklärt die Notwendigkeit, Schrägstriche in C#-Strings (mit \) zu maskieren.

Anschließend wandelt er die Methode in eine Erweiterungsmethode um, sodass sie folgendermaßen verwendet werden kann:

"PrizeModels.csv".VollerDateipfad()

Tim erklärt, dass diese Erweiterungsmethode nur im Text Connector benötigt wird, daher hält er sie in einem separaten Namensraum, um zu vermeiden, dass sie überall in der Lösung angezeigt wird.

Dateilademethode — Lesen von Textdaten

Als nächstes erstellt Tim eine weitere Erweiterungsmethode:

public static List<string> LoadFile(this string file)

Diese Methode überprüft, ob die Datei existiert, indem sie File.Exists() verwendet. Falls die Datei nicht existiert, gibt sie eine leere Liste zurück. Wenn sie existiert, liest sie alle Zeilen mit File.ReadAllLines() und konvertiert sie in eine Liste.

Tim hebt die Bedeutung hervor, fehlende Dateien ordnungsgemäß zu handhaben, da dies beim ersten Ausführen der Anwendung häufig vorkommt.

Text in Preismodelle umwandeln

Tim erstellt eine Methode, um die geladenen Textzeilen in eine Liste von PrizeModel zu konvertieren:

public static List<PrizeModel> ConvertToPrizeModels(this List<string> lines)

Er erklärt die Verwendung von durch Kommas getrennten Werten (CSV), wobei jede Zeile Felder enthält, die durch Kommas getrennt sind. Tim teilt jede Zeile in Spalten auf und parst sie in die entsprechenden Datentypen:

  • ID → int.Parse()

  • Platznummer → int.Parse()

  • Platzname → string

  • Preisbetrag → decimal.Parse()

  • Preisprozent → double.Parse()

Tim erklärt auch, dass er absichtlich zulässt, dass die Anwendung abstürzt, wenn die Daten ungültig sind. Dies hilft, Probleme frühzeitig aufzuzeigen, anstatt mit beschädigten Daten fortzufahren.

Die maximale ID finden

Tim kehrt zum TextConnector zurück und erklärt, wie man die höchste ID findet:

int currentID = prizes.OrderByDescending(x => x.ID).First().ID + 1;

Er stellt fest, dass dies abstürzt, wenn die Datei leer ist, also fügt er eine Überprüfung hinzu:

if(prizes.Count > 0)
{
    currentID = prizes.OrderByDescending(x => x.ID).First().ID + 1;
}

Dies stellt sicher, dass der erste Eintrag eine ID von 1 erhält.

Modell hinzufügen und speichern

Tim fügt den neuen Preis zur Liste hinzu und konvertiert die Liste dann zurück in Textzeilen:

public static void SaveToPrizeFile(this List<PrizeModel> models, string fileName)

Er verwendet Zeichenfolgeninterpolation, um jede CSV-Zeile zu erstellen und fügt sie einer Liste von Zeichenfolgen hinzu. Schließlich verwendet er:

File.WriteAllLines(fileName.FullFilePath(), lines);

Tim erklärt, dass WriteAllLines die Datei überschreibt, was erwünschtes Verhalten ist, da es die Daten mit aktualisierten Inhalten aktualisiert.

Das Modell zurückgeben

Tim schließt die Methode ab, indem er das PrizeModel mit der zugewiesenen ID zurückgibt. Dies macht den neuen Preis im Rest der Anwendung nutzbar, genau wie in SQL.

Die Textverbindung testen

Tim wechselt zu Program.cs und ändert die Datenverbindung von SQL zu Text. Wenn er die Anwendung ausführt und Preise erstellt, stürzt das System zunächst aufgrund fehlender Aufzeichnungen ab. Tim behebt schnell den Fehler mit der if(prizes.Count > 0) Überprüfung und führt die Anwendung dann erneut aus.

Er zeigt, dass die Daten korrekt in der PrizeModels.csv-Datei gespeichert werden und zeigt, wie die Datei in Notepad oder Excel geöffnet werden kann.

Abschließende Gedanken — Erweiterungsmethoden und Namensräume

Tim beendet die Lektion, indem er die Zuschauer daran erinnert, dass die Erweiterungsmethoden nur angezeigt werden, wenn der richtige Namensraum enthalten ist. Dies vermeidet Unordnung und potenzielle Namenskonflikte. Er stellt fest, dass diese beiden Lektionen eine starke Grundlage für den Rest der Anwendung schaffen und die Basis für zukünftige Entwicklungen legen.

Hero Worlddot related to Ein tiefer Einblick in die C# Textverbindung
Hero Affiliate related to Ein tiefer Einblick in die C# Textverbindung

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an