{"id":55001358,"date":"2022-04-01T00:00:00","date_gmt":"2022-05-10T18:35:08","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1358"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/","title":{"rendered":"Datenzugriff mit .NET, LINQPad und LINQ to DB"},"content":{"rendered":"<p><b>.NET bietet eine ganze Menge M&ouml;glichkeiten, die uns unter Access\/VBA nicht zur Verf&uuml;gung stehen. Und diese M&ouml;glichkeiten wachsen st&auml;ndig weiter, denn Entwickler stellen ihre eigenen Erweiterungen auf der NuGet-Plattform zur Verf&uuml;gung. Was haben wir als Access-Entwickler nun davon Mittlerweile gibt es Bibliotheken wie LINQ to DB, mit denen Sie leicht von einer .NET-Anwendung auf Access-Datenbanken zugreifen k&ouml;nnen. Und es gibt mit LINQPad eine Benutzeroberfl&auml;che, mit denen Sie einfache Prozeduren mit Visual Basic programmieren k&ouml;nnen, ohne Visual Studio zu ben&ouml;tigen. Wir wollen diese beiden Tools als Vorbereitung zu einem weiteren Beitrag vorstellen. Dort werden wir diese nutzen, um die Tabellen einer Access-Datenbank mit zuf&auml;lligen Beispieldaten zu f&uuml;llen.<\/b><\/p>\n<p>Wir werden in diesem Beitrag gleich mehrere Tools einf&uuml;hren, die Sie als Access-Entwickler noch nicht kennen &#8211; aber keine Sorge: Wir beschreiben alles ganz genau, sodass Sie die Techniken ohne Probleme f&uuml;r eigene Projekte anpassen k&ouml;nnen. Es handelt sich um die folgenden Tools:<\/p>\n<ul>\n<li><b>LINQPad<\/b>: Dies ist ein Editor, mit dem Sie C#- und VB-Code eingeben und ausf&uuml;hren k&ouml;nnen, ohne dass Sie Visual Studio ben&ouml;tigen.<\/li>\n<li><b>Linq To DB<\/b>: Dies ist eine Schnittstelle, mit der Sie beispielsweise von LINQPad direkt auf die Daten einer Access-Datenbank zugreifen k&ouml;nnen.<\/li>\n<\/ul>\n<p>Damit haben wir ein perfektes Team: <b>LINQPad <\/b>ist unsere Entwicklungsumgebung zum Programmieren von Code, der unserer Datenbank Beispieldatenbank hinzuf&uuml;gt. <b>LINQ To DB <\/b>schafft die Verbindung zur Access-Datenbank.<\/p>\n<p>Und in einem weiteren Beitrag namens <b>Beispieldaten generieren mit .NET <\/b>(<b>www.access-im-unternehmen.de\/****<\/b>) zeigen wir, wie Sie eine weitere Bibliothek namens Bogus hinzunehmen, um die Tabellen einer Access-Datenbank mit zuf&auml;llig generierten Beispieldaten zu f&uuml;llen.<\/p>\n<h2>LINQPad herunterladen und installieren<\/h2>\n<p>Die &#8222;Spielwiese f&uuml;r .NET-Programmierer&#8220; k&ouml;nnen Sie unter dem folgenden Link herunterladen:<\/p>\n<pre>https:\/\/www.linqpad.net\/<\/pre>\n<p>Danach installieren Sie das Tool und starten es.<\/p>\n<h2>Programme mit LINQPad schreiben<\/h2>\n<p>Da wir den Umgang mit VBA gewohnt sind, liegt es nahe, dass wir unter LINQPad Visual Basic nutzen und nicht C#. Um lauff&auml;hige Programme mit Prozeduren zu entwickeln, nutzen wir dort die Vorlage <b>VB Program<\/b>, die Sie f&uuml;r den einzigen bisher angezeigten Registerreiter unter <b>Language <\/b>ausw&auml;hlen.<\/p>\n<p>Hier erg&auml;nzen Sie nun die bereits vorliegende Prozedur Main um eine <b>Debug.Print<\/b>-Anweisung und f&uuml;hren die Prozedur durch Bet&auml;tigen der Taste <b>F5 <\/b>aus (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_02\/pic_1358_001.png\" alt=\"Ein erstes Beispiel in LINQPad\" width=\"699,559\" height=\"357,2402\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Ein erstes Beispiel in LINQPad<\/span><\/b><\/p>\n<p><b>F5 <\/b>l&ouml;st immer die <b>Main<\/b>-Prozedur aus. Dieser k&ouml;nnen Sie nun den kompletten ben&ouml;tigten Code zuweisen, Sie k&ouml;nnen aber auch <b>Function<\/b>&#8211; oder <b>Sub<\/b>-Prozeduren definieren und aufrufen oder auch Klassen deklarieren und initialisieren.<\/p>\n<p>An dieser Stelle direkt der Hinweis, dass Sie Parameter unter VB immer in Klammern einfassen m&uuml;ssen. Au&szlig;erdem erfolgen Zuweisungen auch an Objektvariablen ohne das <b>Set<\/b>-Schl&uuml;sselwort.<\/p>\n<h2>Linq To DB installieren<\/h2>\n<p>Damit wir auf unsere Beispieldatenbank zugreifen k&ouml;nnen,  ben&ouml;tigen wir eine Erweiterung namens <b>Linq To DB<\/b>. Um diese hinzuzuf&uuml;gen, &ouml;ffnen Sie mit dem Kontextmen&uuml;-Eintrag <b>Query Properties&#8230; <\/b>f&uuml;r den aktuellen Registerreiter die Einstellung f&uuml;r das aktuelle Fenster (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_02\/pic_1358_002.png\" alt=\"Anzeigen der Query Properties\" width=\"599,559\" height=\"344,4485\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Anzeigen der Query Properties<\/span><\/b><\/p>\n<p>Dies &ouml;ffnet den Dialog <b>Query Properties<\/b>, der unten die Schaltfl&auml;che <b>Add NuGet&#8230; <\/b>bereith&auml;lt (siehe Bild 3). &Uuml;ber <b>NuGet<\/b>-Pakete k&ouml;nnen Sie verschiedene Pakete mit Tools zu einem Projekt hinzuf&uuml;gen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_02\/pic_1358_003.png\" alt=\"Hinzuf&uuml;gen von NuGet-Paketen\" width=\"674,559\" height=\"346,6856\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Hinzuf&uuml;gen von NuGet-Paketen<\/span><\/b><\/p>\n<p>Klicken Sie diese an, erscheint der Dialog <b>LINQPad NuGetManager<\/b>.<\/p>\n<p>Hier geben Sie unter Search online den Suchbegriff <b>Linq To DB <\/b>ein und finden schnell einen passenden Eintrag, den Sie mit einem Klick auf die Schaltfl&auml;che <b>Add to Query <\/b>zum aktuellen Query-Fenster hinzuf&uuml;gen (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_02\/pic_1358_004.png\" alt=\"LINQ to DB hinzuf&uuml;gen\" width=\"649,559\" height=\"319,5862\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: LINQ to DB hinzuf&uuml;gen<\/span><\/b><\/p>\n<h2>Tabellen der Datenbank verf&uuml;gbar machen<\/h2>\n<p>Danach k&ouml;nnen Sie bereits eine Verbindung zur gew&uuml;nschten Access-Datenbank hinzuf&uuml;gen. Dazu klicken Sie im linken Bereich des Fensters auf den Eintrag <b>Add connection<\/b>.<\/p>\n<p><!--30percent--><\/p>\n<p>Es erscheint der Dialog <b>Choose Data Context<\/b>. Hier selektieren Sie im oberen Bereich den Eintrag <b>LINQ to DB<\/b> und klicken anschlie&szlig;end auf die Schaltfl&auml;che <b>Next<\/b> (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_02\/pic_1358_005.png\" alt=\"Herstellen einer Verbindung zur Datenbank\" width=\"649,559\" height=\"450,2841\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Herstellen einer Verbindung zur Datenbank<\/span><\/b><\/p>\n<p>Der folgende Schritt zeigt den Dialog <b>LINQ to DB Connection <\/b>an. Hier w&auml;hlen Sie oben zun&auml;chst den <b>Data Provider <\/b>aus, in diesem Fall <b>Microsoft Access (OleDb)<\/b>. Dann geben Sie die Verbindungszeichenfolge ein.<\/p>\n<p>Bei der folgenden Verbindungszeichenfolge brauchen Sie nur den Pfad zur Access-Datenbank anzupassen:<\/p>\n<pre>Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\...\\LINQPad.accdb;Persist Security Info=<span style=\"color:blue;\">False<\/span><\/pre>\n<p>Damit testen Sie schlie&szlig;lich noch die Verbindung (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_02\/pic_1358_006.png\" alt=\"Testen der Verbindung\" width=\"499,5589\" height=\"658,933\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Testen der Verbindung<\/span><\/b><\/p>\n<p>War dies erfolgreich, k&ouml;nnen Sie den Dialog mit <b>OK <\/b>beenden.<\/p>\n<p>Danach zeigt der linke Bereich von LINQPad bereits die Elemente der referenzierten Datenbank an &#8211; in unserem Beispiel einen Hauptknoten mit der Datenbank sowie ein Unterelement namens <b>Tabellen<\/b>, das die Tabellen der Datenbank enth&auml;lt, einschlie&szlig;lich der Systemtabellen (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_02\/pic_1358_007.png\" alt=\"Anzeige der Elemente der mit Beispieldaten zu f&uuml;llenden Datenbank\" width=\"349,5589\" height=\"626,9865\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Anzeige der Elemente der mit Beispieldaten zu f&uuml;llenden Datenbank<\/span><\/b><\/p>\n<p>Gegebenenfalls m&uuml;ssen Sie nun noch im oberen Bereich des <b>Query<\/b>-Fensters unter <b>Connection <\/b>die neu hinzugef&uuml;gte Verbindung ausw&auml;hlen.<\/p>\n<h2>Auf die Daten der Beispieldatenbank zugreifen<\/h2>\n<p>W&auml;hrend wir gleich neue Beispieldaten zu den Tabellen der Beispieldatenbank hinzuf&uuml;gen, wollen wir pr&uuml;fen, ob diese wie gew&uuml;nscht angelegt wurden. Dazu k&ouml;nnten wir Access &ouml;ffnen und direkt in der Beispieldatenbank nachschauen, aber wir k&ouml;nnen die Datenbank nicht ge&ouml;ffnet lassen, weil LINQ die Verbindung exklusiv herstellt und wir die Datenbank jedes Mal wieder schlie&szlig;en m&uuml;ssten, wenn wir &uuml;ber LINQ neue Daten schreiben wollen.<\/p>\n<p>Also schauen wir uns an, wie wir die Daten in den Tabellen von LINQPad aus kontrollieren k&ouml;nnen. Dazu m&uuml;ssen Sie wissen, dass beispielsweise <b>tblAnreden <\/b>gleichzeitig die Auflistung der Elemente der Tabelle benennt als auch die Klasse f&uuml;r den Zugriff auf die Elemente. Das wird interessant, wenn wir beispielsweise alle Eintr&auml;ge der Tabelle <b>tblAnreden <\/b>ausgeben wollen.<\/p>\n<p>Dazu schreiben wir eine neue Prozedur namens <b>AnredenAusgeben<\/b>, die wie folgt aussieht:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AnredenAusgeben\r\n     <span style=\"color:blue;\">Dim <\/span>objAnrede<span style=\"color:blue;\"> As <\/span>tblAnreden\r\n     For Each objAnrede In tblAnreden\r\n         <span style=\"color:blue;\">Debug.Print<\/span>(objAnrede.ID & \" \" _\r\n            & objAnrede.Anredebezeichnung)\r\n     <span style=\"color:blue;\">Next<\/span> objAnrede\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur deklariert eine Objektvariable f&uuml;r den Zugriff auf einzelne Anreden auf Basis der Klasse <b>tblAnreden<\/b>. Dann durchlaufen wir in einer <b>For Each<\/b>-Schleife alle Eintr&auml;ge der Tabelle <b>tblAnreden <\/b>und referenzieren das aktuelle Element jeweils mit der Objektvariablen <b>objAnrede<\/b>.<\/p>\n<p>Dieses Objekt stellt alle Felder dieser Tabelle per IntelliSense bereit, sodass wir dar&uuml;ber auf die Inhalte zugreifen k&ouml;nnen. Die <b>Debug.Print<\/b>-Anweisung innerhalb der <b>For Each<\/b>-Schleife gibt den Inhalt der beiden Felder <b>ID <\/b>und <b>Anredebezeichnung <\/b>im Direktfenster von LINQPad aus.<\/p>\n<p>Nun brauchen wir nur noch einen Aufruf dieser Prozedur in die Methode <b>Main <\/b>unterzubringen:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>Main\r\n     AnredenAusgeben\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Bet&auml;tigen Sie nun die Schaltfl&auml;che <b>F5<\/b>, gibt die Prozedur die Daten der Tabelle <b>tblAnreden <\/b>im Direktbereich aus (siehe Bild 8). Wie sch&ouml;n w&auml;re es, wenn wir unter Access\/VBA so auf die Daten von Tabellen zugreifen k&ouml;nnten!<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_02\/pic_1358_008.png\" alt=\"Ausgabe der Daten einer Tabelle\" width=\"549,559\" height=\"359,5518\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Ausgabe der Daten einer Tabelle<\/span><\/b><\/p>\n<h2>Neue Datens&auml;tze hinzuf&uuml;gen<\/h2>\n<p>Der Aufwand zum Hinzuf&uuml;gen einer neuen Anwendung h&auml;lt sich ebenfalls in Grenzen. Hier verwenden wir die Variable <b>objUserQuery <\/b>des Typs <b>UserQuery<\/b>, die wir mit einem Verweis auf die Eigenschaft <b>DataContext <\/b>von <b>tblAnreden <\/b>f&uuml;llen. Zum Erstellen einer neuen Anrede verwenden wir die Variable <b>objAnrede <\/b>mit dem Datentyp <b>tblAnreden<\/b>. Nach dem Initialisieren eines neuen Elements mit der <b>New<\/b>-Anwendung stellen wir die Eigenschaften <b>ID <\/b>und <b>Anredebezeichnung <\/b>auf die gew&uuml;nschten Werte ein.<\/p>\n<p>Schlie&szlig;lich nutzen wir die <b>Insert<\/b>-Methode von <b>objUserQuery<\/b>, um das Element aus <b>objAnrede <\/b>hinzuzuf&uuml;gen:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>NeueAnrede\r\n     <span style=\"color:blue;\">Dim <\/span>objUserQuery<span style=\"color:blue;\"> As <\/span>UserQuery\r\n     <span style=\"color:blue;\">Dim <\/span>objAnrede<span style=\"color:blue;\"> As <\/span>tblAnreden\r\n     objUserQuery = tblAnreden.DataContext\r\n     objAnrede = <span style=\"color:blue;\">New<\/span> tblAnreden\r\n     <span style=\"color:blue;\">With<\/span> objAnrede\r\n         .ID = 4\r\n         .Anredebezeichnung = \"Test\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     objUserQuery.Insert(objAnrede)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit wir direkt sehen, ob die neue Anrede erfolgreich hinzugef&uuml;gt wurde, f&uuml;hren wir erst die Prozedur <b>NeueAnrede <\/b>aus und dann <b>AnredenAusgeben<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>Main\r\n     NeueAnrede\r\n     AnredenAusgeben\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis ist die Ausgabe der vorhandenen Datens&auml;tze plus dem neuen Datensatz:<\/p>\n<pre>1 Herr\r\n2 Frau\r\n3 Firma\r\n10 Test<\/pre>\n<h2>Daten l&ouml;schen<\/h2>\n<p>Um einen Datensatz zu l&ouml;schen, nutzen Sie am einfachsten die <b>Execute<\/b>-Methode des <b>UserQuery<\/b>-Objekts und &uuml;bergeben diesem die entsprechende <b>DELETE<\/b>-Anweisung:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AnredeLoeschen\r\n     <span style=\"color:blue;\">Dim <\/span>objUserQuery<span style=\"color:blue;\"> As <\/span>UserQuery\r\n     objUserQuery = tblAnreden.DataContext\r\n     objUserQuery.Execute( _\r\n         \"DELETE FROM tblAnreden WHERE ID = 4\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Verkn&uuml;pfte Daten hinzuf&uuml;gen<\/h2>\n<p>Im folgenden Beitrag, in dem wir das Erzeugen von zuf&auml;lligen Beispieldaten mit der Bibliothek <b>Bogus <\/b>beschreiben, werden wir mehrere verkn&uuml;pfte Tabellen mit Daten f&uuml;llen. Dazu ben&ouml;tigen wir noch eine entsprechende Strategie.<\/p>\n<p>Diese sieht so aus, dass wir eine Reihenfolge zum Bef&uuml;llen der Tabellen festlegen. Dabei beginnen wir logischerweise mit den Tabellen, die selbst keine Fremdschl&uuml;sselfelder enthalten.<\/p>\n<p>Wenn wir die Tabellen <b>tblAnreden<\/b>, <b>tblKunden<\/b>, <b>tblProdukte<\/b>, <b>tblBestellungen <\/b>und <b>tblBestellpositionen <\/b>nutzen, starten wir als mit den Tabellen <b>tblAnreden <\/b>und <b>tblProdukte<\/b>, denn diese beiden haben keine Fremdschl&uuml;ssefelder.<\/p>\n<p>Danach folgen alle Tabellen, die mit diesen beiden Tabellen verkn&uuml;pft sind und mit keiner anderen. Hier finden wir nur die Tabelle <b>tblKunden<\/b>, denn <b>tblBestellungen <\/b>ist mit <b>tblKunden <\/b>verkn&uuml;pft und <b>tblBestellpositionen <\/b>mit <b>tblBestellungen <\/b>(und <b>tblProdukte<\/b>).<\/p>\n<p>Nachdem wir die Tabelle <b>tblKunden <\/b>gef&uuml;llt haben, wobei wir das Fremdschl&uuml;sselfeld <b>AnredeID<\/b> mit den bereits in der Tabelle <b>tblAnreden <\/b>enthaltenen Werten f&uuml;r das Prim&auml;rschl&uuml;sselfeld <b>ID <\/b>f&uuml;llen.<\/p>\n<p>Danach folgt dann die Tabelle <b>tblBestellungen<\/b>, bei der wir dann die Werte f&uuml;r das Fremdschl&uuml;sselfeld <b>KundeID<\/b> aus dem Prim&auml;rschl&uuml;sselfeld <b>ID <\/b>der Tabelle <b>tblKunden <\/b>beziehen.<\/p>\n<p>Schlie&szlig;lich folgt noch die Tabelle <b>tblBestellpositionen<\/b>, die gleich zwei Fremdschl&uuml;sselfelder enth&auml;lt, die auf die Prim&auml;rschl&uuml;sselfelder der beiden Tabellen <b>tblBestellungen <\/b>und <b>tblProdukte <\/b>verweisen. Beide sind bereits gef&uuml;llt, also k&ouml;nnen wir auch diese verwenden, um die Tabelle <b>tblBestellpositionen <\/b>mit Daten zu f&uuml;llen.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Der Zugriff auf die Daten einer Access-Datenbank mit der Programmiersprache Visual Basic von einer einfachen Plattform wie LINQPad aus er&ouml;ffnet eine ganze Menge M&ouml;glichkeiten.<\/p>\n<p>Wir k&ouml;nnen nun, wie im Beitrag <b>Beispieldaten mit .NET und Bogus <\/b>(<b>www.access-im-unternehmen.de\/****<\/b>) beschrieben, .NET-Bibliotheken nutzen, um vorbereitende Aufgaben zu erledigen, f&uuml;r die wir sonst wesentlich mehr Aufwand h&auml;tten betreiben m&uuml;ssen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>LINQPad.accdb<\/p>\n<p>LINQPad.linq<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/A37F632B-C9CD-4236-8F99-CADC5E7410F4\/aiu_1358.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>.NET bietet eine ganze Menge M&ouml;glichkeiten, die uns unter Access\/VBA nicht zur Verf&uuml;gung stehen. Und diese M&ouml;glichkeiten wachsen st&auml;ndig weiter, denn Entwickler stellen ihre eigenen Erweiterungen auf der NuGet-Plattform zur Verf&uuml;gung. Was haben wir als Access-Entwickler nun davon Mittlerweile gibt es Bibliotheken wie LINQ to DB, mit denen Sie leicht von einer .NET-Anwendung auf Access-Datenbanken zugreifen k&ouml;nnen. Und es gibt mit LINQPad eine Benutzeroberfl&auml;che, mit denen Sie einfache Prozeduren mit Visual Basic programmieren k&ouml;nnen, ohne Visual Studio zu ben&ouml;tigen. Wir wollen diese beiden Tools als Vorbereitung zu einem weiteren Beitrag vorstellen. Dort werden wir diese nutzen, um die Tabellen einer Access-Datenbank mit zuf&auml;lligen Beispieldaten zu f&uuml;llen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022022,662022,44000025],"tags":[],"class_list":["post-55001358","post","type-post","status-publish","format-standard","hentry","category-66022022","category-662022","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Datenzugriff mit .NET, LINQPad und LINQ to DB - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datenzugriff mit .NET, LINQPad und LINQ to DB\" \/>\n<meta property=\"og:description\" content=\".NET bietet eine ganze Menge M&ouml;glichkeiten, die uns unter Access\/VBA nicht zur Verf&uuml;gung stehen. Und diese M&ouml;glichkeiten wachsen st&auml;ndig weiter, denn Entwickler stellen ihre eigenen Erweiterungen auf der NuGet-Plattform zur Verf&uuml;gung. Was haben wir als Access-Entwickler nun davon Mittlerweile gibt es Bibliotheken wie LINQ to DB, mit denen Sie leicht von einer .NET-Anwendung auf Access-Datenbanken zugreifen k&ouml;nnen. Und es gibt mit LINQPad eine Benutzeroberfl&auml;che, mit denen Sie einfache Prozeduren mit Visual Basic programmieren k&ouml;nnen, ohne Visual Studio zu ben&ouml;tigen. Wir wollen diese beiden Tools als Vorbereitung zu einem weiteren Beitrag vorstellen. Dort werden wir diese nutzen, um die Tabellen einer Access-Datenbank mit zuf&auml;lligen Beispieldaten zu f&uuml;llen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-10T18:35:08+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Datenzugriff mit .NET, LINQPad und LINQ to DB\",\"datePublished\":\"2022-05-10T18:35:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/\"},\"wordCount\":1705,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"2\\\/2022\",\"2022\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/\",\"name\":\"Datenzugriff mit .NET, LINQPad und LINQ to DB - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2022-05-10T18:35:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Datenzugriff mit .NET, LINQPad und LINQ to DB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Datenzugriff mit .NET, LINQPad und LINQ to DB - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/","og_locale":"de_DE","og_type":"article","og_title":"Datenzugriff mit .NET, LINQPad und LINQ to DB","og_description":".NET bietet eine ganze Menge M&ouml;glichkeiten, die uns unter Access\/VBA nicht zur Verf&uuml;gung stehen. Und diese M&ouml;glichkeiten wachsen st&auml;ndig weiter, denn Entwickler stellen ihre eigenen Erweiterungen auf der NuGet-Plattform zur Verf&uuml;gung. Was haben wir als Access-Entwickler nun davon Mittlerweile gibt es Bibliotheken wie LINQ to DB, mit denen Sie leicht von einer .NET-Anwendung auf Access-Datenbanken zugreifen k&ouml;nnen. Und es gibt mit LINQPad eine Benutzeroberfl&auml;che, mit denen Sie einfache Prozeduren mit Visual Basic programmieren k&ouml;nnen, ohne Visual Studio zu ben&ouml;tigen. Wir wollen diese beiden Tools als Vorbereitung zu einem weiteren Beitrag vorstellen. Dort werden wir diese nutzen, um die Tabellen einer Access-Datenbank mit zuf&auml;lligen Beispieldaten zu f&uuml;llen.","og_url":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/","og_site_name":"Access im Unternehmen","article_published_time":"2022-05-10T18:35:08+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"9\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Datenzugriff mit .NET, LINQPad und LINQ to DB","datePublished":"2022-05-10T18:35:08+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/"},"wordCount":1705,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["2\/2022","2022","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/","url":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/","name":"Datenzugriff mit .NET, LINQPad und LINQ to DB - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2022-05-10T18:35:08+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Datenzugriff_mit_NET_LINQPad_und_LINQ_to_DB\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Datenzugriff mit .NET, LINQPad und LINQ to DB"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001358","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001358"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001358\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001358"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001358"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}