Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Visual C# 2011 Grundkurs

Ändern und löschen mit Linq

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Neben dem Abfragen einer Datenbank mit Linq2SQL ist es auch kinderleicht, damit Daten einzufügen oder zu löschen. So funktioniert es!
08:57

Transkript

Wenn man LINQ2SQL benutzt, um Daten aus Datenbanken zu holen, dann nimmt es mir zum einen das sogenannte objektrelationale Mapping, also das Mapping zwischen Entitäten aus der Datenbank und Objekten aus meiner Sprache, ab, und zum anderen kann ich mit der Technologie LINQ richtig einfach Datenbankabfragen machen, und zwar nicht - wie man das normalerweise macht - mit der SQL-Abfragesprache, sondern mit Sprachmitteln in C#, wie man das hier sieht. Genauso einfach wie man Daten aus einer Datenbank abfragt mit LINQ, kann man auch Daten in die Datenbank einfügen oder Daten löschen, und das schauen wir uns jetzt mal an. Wir haben hier links eine SQL-Datenbankdatei. Wir haben eine Datenbankdatei, weil mit Visual Studio Express leider nicht mit LINQ auf den Datenbankserver zugegriffen werden kann, also auf einen SQL-Datenbankserver; das geht nur in der kommerziellen Version. Deswegen hier diese Datenbankdatei. In der Datenbankdatei haben wir zwei Tabellen. Zunächst eine Tabelle "Contact". In "Contact" sind zwei Kontakte definiert, zunächst meiner und der von Golo und zusätzlich die Webadressen. Neben den Daten haben wir eine Fremdschlüsselbeziehung zur Tabelle "Category". In "Category" haben wir zunächst zwei Kategorien: "Freunde" und "Kunden". Und hier haben wir z.B. meinen Datensatz mit den "Freunden" verknüpft, oder den Golo mit den "Kunden". Das Ganze kann man sich auch noch schön hier im Datenbankdiagramm anzeigen lassen. Da sieht man hier die "Contact"-Tabelle, die "Category"-Tabelle und hier unsere Beziehung. Zusätzlich haben wir uns LINQ2SQL-Klassen erstellen lassen. Diese LINQ2SQL-Klassen sind quasi dieses objektrelationale Mapping, von dem wir eben gesprochen haben. Dort habe ich ganz normale Klassen: einmal die Klasse "Category" und die Klasse "Contact" und zwischen diesen Klassen gibt es eine Beziehung. In unserem Programm haben wir hier zunächst eine Abfrage, in der wir uns alle Kontakte aus der Datenbank holen, die die Kategorie "Freunde" haben. Man sieht, das ist ganz normaler C# Code, eben mit dieser Technologie LINQ. Danach geben wir diese Datensätze aus. Wenn ich diese Anwendung ausführe, sieht man, dass mein Datensatz ausgegeben wird, weil eben nur ich in der Kategorie "Freunde" bin. Wenn ich diese Zahl entferne, also "Kategorie"-Name, "Filter", dann werde sowohl ich angezeigt, als auch der Golo. Diese Daten, die ich dort unten bekomme, sind ganz normale Klassen, und ich könnte mir da jetzt alle anderen Fälle in der Datenbank ausgeben lassen. Jetzt möchten wir z.B. in diese Datenbank eine neue Kategorie einfügen. Das ist ganz, ganz einfach. Ich gehe einfach hier hin und sage: Lege mir eine neue Kategorie an. Dann nehmen wir: Cat = new Category ();. In dieser Kategorie, sage ich mal, ist der Name "Bekannte". Ich mache ein Semikolon. Dann lege ich mir zusätzlich nur noch den "Contact" dazu an: con = new Contact ();. Dem Kontakt weise ich wieder Werte zu. Dann sage ich: Con FirstName = "Christoph"; und Con Last Name = "Andel". Also ich fülle jetzt dieses Objekt, gebe Werte und Con.Web = ein - eine Webadresse hat der gute Christoph nicht, deshalb nehmen wir hier "hat keine"; Wenn ich jetzt diesen Kontakt erstelle, muss ich ihm natürlich auch eine Kategorie zuweisen. Normalerweise, wir haben es in der Datenbank gesehen, müsste ich eine Zahl eingeben, aber bei LINQ ist das Ganze natürlich viel eleganter gelöst. Ich kann mir hier auf mein Kontaktobjekt die Eigenschaft "Category" anzeigen lassen. Diese "Category" ist eben nicht eine Zahl, sondern ein "Category"-Objekt. Dem weisen wir jetzt hier meine neu erzeugte Kategorie zu, und damit habe ich quasi die Beziehung zwischen der neu erstellten Kategorie und dem neu erstellten Kontakt gemacht. Ich habe den "Kontakt" in die Kategorie "Bekannte" geschmissen. Das sind nun die erzeugten Objekte. Die sind noch nicht in unserer Datenbank. Damit sie in unserer Datenbank sind, muss ich jetzt zunächst hingehen und diese beiden Objekte in die Datenbank schmeißen. Ich kann aber auch hingehen und kann einfach das Kontaktobjekt in die Datenbank speichern, weil durch die Beziehung, die wir hier unten erstellt haben, wird dann automatisch auch hier oben das Kategorieobjekt mit in die Datenbank geschrieben. Das Ganze ist relativ einfach. Ich gehe jetzt hin und sage: Ich habe hier oben noch meinen "DataDataContext" und dort rufe ich das Ganze mal auf diese Referenz auf. Ich sehe diese Tabellen, und ich möchte den Kontakt in die Tabelle "Contact" einfügen. Dann habe ich eine Methode "InsertOnSubmit". "InsertOnSubmit" heißt, dass der das Ganze einfügen soll, wenn ich das nächste Mal diesen DataContext submitte. Also ich vergebe jetzt hier diesen neu erstellten Kontakt und sage dann in der Zeile drunter einmal "db.SubmitChanges ();". Er soll jetzt alle Änderungen, die ich an diesem lokalen Objektmodell durchgeführt habe, in die Datenbank schreiben. Er überprüft quasi die ganze Zeit - wenn ich oben mein Objektmodell in der Programmiersprache ändere, indem ich neue Kontakte hinzufüge oder Kategorien ändere - welche Änderungen durchgeführt wurden. Dann, wenn ich "SubmitChanges" aufrufe, fasst er diese Änderungen zusammen, generiert Datenbankanweisungen und diese SQL-Anweisung, schickt die in die Datenbank und persistiert damit meine Änderungen, die ich oben gemacht habe in der Datenbank. Alles, was ich dazu tun muss, ist das, was wir gemacht haben. Kein einziges SQL-Statement und nichts. Wir führen das Ganze einmal aus. Wir sehen schon: Hier unten wurden wieder die ganzen Daten aus unserer Datenbank abgefragt und in unserem Fenster war der "Christoph" bereits drin, d.h., dass er bereits in der Datenbank steht. Wir haben also hier oben mit diesen paar Zahlen Code in die Datenbank eingefügt. Das hier oben war das //Einfügen, und das hier war das //Holen der Daten und natürlich die Ausgabe auf der Konsole, und hier unten löschen wir jetzt einfach mal ein Objekt. Damit wir ein Objekt löschen können, müssen wir uns es zunächst mal holen. D.h.: //Löschen eines Objektes - wir müssen zunächst ein Objekt aus der Datenbank holen, das wir gerne löschen möchten. Wir haben den "Christoph" oben eingefügt. Jetzt schmeißen wir ihn hier an der Stelle wieder raus. Wir benutzen jetzt diesen Variantendatentyp. Variant heißt, dass der Datentyp beim Schreiben jetzt noch nicht wirklich klar ist. Der wird dann vom Compiler ermittelt. Das müssen Sie jetzt nicht genau verstehen, Sie müssen den nicht benutzen, aber hier ist es jetzt gerade einfacher. Also "var contact =" und dann kommt das Statement "(from c in db.contact" und dann sage ich ihm hier, welche Einschränkung ich habe. Dann sage ich "where c.LastName = = "Andel", also ein ganz normaler C# Quelltext. Dann sage ich ihm hier "select c)". Jetzt bekomme ich - ähnlich wie das bei SQL Anweisungen ist - nicht nur ein einziges Objekt zurück, sondern eine Ergebnisliste. In dieser Ergebnisliste ist jetzt nur ein Objekt drin. Ich muss aber explizit sagen, dass ich nur dieses eine Objekt haben möchte. Dazu gibt es sogenannte "Extension Methods", und z.B. diese hier würde mir das erste Objekt ausgeben. Wenn kein Objekt da wäre, würde es eine "Exception" geben. Aber da das Objekt auf jeden Fall da ist, nutzen wir das. D.h.: Wir holen uns jetzt aus dieser Datenbank dieses Objekt "Christoph". Das steht gleich hier drin. Das können wir uns angucken. Das machen wir eben gerade. Man sieht hier: Das sind die Daten von Christoph aus der Datenbank. Jetzt müssen wir das Ganze löschen, und dazu gehen wir auf unseren DataDataContext, schauen uns die Tabelle an, aus der wir dieses Objekt löschen wollen. Das ist natürlich "Contact". Dann nehmen wir die Methode "DeleteOnSubmit". Ähnlich wie oben bei "InsertOnSubmit", kann ich hier jetzt ein Objekt übergeben: "Contact". Danach muss ich die "SubmitChanges"-Methode aufrufen. Das ist jetzt ähnlich wie eben bei "Insert" hier oben. Zunächst sage ich hier oben: Das nächste Mal, wenn er ein Sumbit aufruft, oder: Das übergebene Objekt aus der Datenbank löschen. Und hier unten sage ich: Alle Änderungen, die an deinem Objektmodell oben durchgeführt wurden, jetzt bitte in die Datenbank persistieren. Dazu gehen wir jetzt hier nochmal hin und kopieren uns diese Daten, um das Ganze auszugeben. Das sehen wir dann gleich. Wir fügen oben noch mal ein "Console.WriteLine" ein, damit wir gleich eine Leerzeile dazwischen haben und das besser sehen. Das muss ich eben entfernen, weil die Variable bereits deklariert war. Dann führen wir das Ganze nochmal aus. Ich glaube, ich mache mal den BreakPoint hier weg, damit wir das Ganze auf der Konsole sehen können. Wir sehen jetzt hier: Hier oben haben wir den "Christoph" quasi hinzugefügt. Dann haben wir die Daten aus der Datenbank geholt. Dann haben wir gesehen, der "Christoph" stand in der Datenbank. Hier haben wir den "Christoph" wieder rausgelöscht und als wir die Daten wieder ausgelesen haben, war der "Christoph" weg. Das ist alles, was wir jetzt gemacht haben, wo man normalerweise sehr viele Code hätte schreiben müssen, z.B. mit der ADO.NET Datenbank-Klasse. Wir haben in diesem Video gesehen, dass neben dem Abfragen von Daten mit der Datenbanktechnologie LINQ2SQL auch das Einfügen und das Löschen von Elementen ein absolutes Kinderspiel ist. Man muss wenig Code schreiben. Man muss nur einmal dieses Konzept ein bisschen verstanden haben, und schon kann man wirklich sehr, sehr große Anwendungen mit dieser Technologie umsetzen und das macht wirklich Spaß.

Visual C# 2011 Grundkurs

Steigen Sie in die C#-Programmierung ein und lernen Sie sowohl die Grundlagen der Sprache C# als auch die Entwicklungsumgebung Visual Studio 2010 und .NET-Framework kennen.

7 Std. 28 min (81 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Visual Studio Visual Studio 2010
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
ISBN-Nummer:978-3-8273-6375-6
Erscheinungsdatum:27.06.2011
Laufzeit:7 Std. 28 min (81 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!