Beispieldaten generieren mit .NET und Bogus

Das Produzieren von Beispieldaten ist immer wieder eine mühselige Aufgabe. Beispieldaten benötigen Sie, um beim Entwickeln neuer Anwendungen die Funktionen zu testen, die mit der Anzeige, dem Bearbeiten oder Löschen von Daten zusammenhängen. Und auch zum Testen des Hinzufügens von Daten benötigen Sie gegebenenfalls schon Daten in verknüpften Tabellen zur Auswahl. Unter .NET gibt es verschiedene Bibliotheken, die das Generieren von Beispieldaten erleichtern. Leider sind diese nicht so ohne Weiteres unter Access verfügbar. Zum Glück gibt es Tools, mit denen Sie diese Bibliotheken dennoch für Ihre Zwecke einsetzen können. In diesem Beitrag nutzen wir den Editor LINQPad, um Beispieldaten mit der Bogus-Bibliothek zu erzeugen und diese dann mit der Bibliothek LINQ to DB den Tabellen einer Beispieldatenbank hinzuzufügen.

Vorbereitungen

Für die beschriebenen Techniken benötigen Sie die Entwicklungsumgebung LINQPad sowie die Datenzugriffsbibliothek LINQ to DB. Wie Sie diese beiden herunterladen, installieren und verwenden, beschreiben wir im Beitrag Datenzugriff mit .NET, LINQPad und LINQ to DB (www.access-im-unternehmen.de/1358).

Wie Sie diese beiden nutzen, um mit einer weiteren Bibliothek namens Bogus zufällige Beispieldaten für eine Datenbank zu erzeugen, zeigen wir im vorliegenden Beitrag.

Bogus zum Projekt hinzufügen

Zum Ermitteln der Beispieldaten, die wir zu den Tabellen der Anwendung hinzufügen wollen, nutzen wir die bereits eingangs erwähnte Bibliothek Bogus.

Diese müssen wir genau wie LINQ to DB zunächst verfügbar machen. Dazu klicken Sie unter LINQPad mit der rechten Maustaste auf den Registerreiter des Query-Bereichs und wählen den Eintrag Query Properties… aus (siehe Bild 1).

Aufrufen des Dialogs Query Properties per Kontextmenü

Bild 1: Aufrufen des Dialogs Query Properties per Kontextmenü

Im nun erscheinenden Dialog Query Properties klicken Sie auf die Schaltfläche Add NuGet… und geben im folgenden Dialog unter Search online den Suchbegriff Bogus ein. Den nun angezeigten Eintrag aus Bild 2 fügen Sie dann mit einem Klick auf die Schaltfläche Add to Query hinzu.

Hinzufügen des Bogus-Pakets

Bild 2: Hinzufügen des Bogus-Pakets

Es erscheint nun ein neuer Eintrag im linken Bereich des Dialogs LINQPad NuGet Manager. Hier klicken Sie noch auf Add namespaces (siehe Bild 3).

Hinzufügen des Bogus-Namespaces

Bild 3: Hinzufügen des Bogus-Namespaces

Dies öffnet einen weiteren Dialog namens Add Namespaces From NuGet Assemblies. Hier wählen Sie den Eintrag Bogus aus und klicken auf OK (siehe Bild 4).

Hinzufügen eines Verweises auf den Bogus-Namespace

Bild 4: Hinzufügen eines Verweises auf den Bogus-Namespace

Nachdem Sie diesen Dialog und auch den Dialog LINQPad NuGet Manager geschlossen haben, finden Sie im Dialog Query Properties unter Additional References den Eintrag Bogus vor (siehe Bild 5).

Der Verweis auf den Bogus-Namespace

Bild 5: Der Verweis auf den Bogus-Namespace

Damit sind die Vorbereitungen abgeschlossen und wir können uns dem Einsatz von Bogus zum Generieren von Beispieldaten zuwenden.

Vorweg: Anreden anlegen

Einen Schritt erledigen wir allerdings noch vorneweg – das Anlegen der Datensätze in der Tabelle tblAnreden. Für diese benötigen wir keinen Zufallsgenerator und somit auch nicht die Bibliothek Bogus. Wir fügen die Anreden einfach mit der folgenden Prozedur hinzu:

Public Sub AnredenAnlegen
     Dim objUserQuery As UserQuery
     Dim objAnrede As tblAnreden
     objUserQuery = tblAnreden.DataContext
     objAnrede = New tblAnreden 
     With objAnrede 
         .ID = 1
         .Anredebezeichnung = "Herr"
     End With
     objUserQuery.Insert(objAnrede)
     objAnrede = New tblAnreden()
     With objAnrede
         .ID = 2
         .Anredebezeichnung = "Frau"
     End With
     objUserQuery.Insert(objAnrede)
End Sub

Den Code können wir mit Visual Basic übrigens auch wie folgt schreiben und sparen dabei nicht nur eine Variable, sondern auch einige Zeilen Code:

Public Sub AnredenAnlegen
     Dim objUserQuery As UserQuery
     objUserQuery = tblAnreden.DataContext
     objUserQuery.Insert(New tblAnreden With {.ID = 1,  .Anredebezeichnung = "Herr"})
     objUserQuery.Insert(New tblAnreden With {.ID = 2,  .Anredebezeichnung = "Frau"})
End Sub

Damit wir immer mit einer frisch aufgesetzten Tabelle tblAnreden starten, können wir zuvor die vorhandenen Anreden löschen:

Public Sub AnredenLoeschen
     Dim objUserQuery As UserQuery
     objUserQuery = tblAnreden.DataContext
     objUserQuery.Execute("DELETE FROM tblAnreden")
End Sub

Und schließlich geben wir die frisch erzeugten Anreden nachher einmal im Direktbereich von LINQPad aus:

Public Sub AnredenAusgeben
     Dim objAnrede As tblAnreden
     For Each objAnrede In tblAnreden
         Debug.Print(objAnrede.ID & " "  & objAnrede.Anredebezeichnung)
     Next objAnrede
End Sub

Zufallsdaten mit Bogus ermitteln

Bogus bietet verschiedene Klassen, die Funktionen zum Erstellen von Zufallsdaten thematisch zusammenfassen. Diese werden unter folgendem Link ausführlicher beschrieben:

https://github.com/bchavez/Bogus#bogus-api-support

Es gibt die folgenden Klassen:

  • Address: Liefert verschiedene Eigenschaften von Adressen wie Straße, PLZ, Ort und Land, aber auch beispielsweise Höhen- und Breitengrade oder Angaben wie Himmelsrichtungen.
  • Commerce: Interessant für alles, was mit dem Handel zu tun hat. Bietet Daten wie Produktnamen, Farben, Adjektive oder Materialien, Preise, Werte für Barcodes oder Kategorien und Abteilungen.
  • Company: Liefert Firmennamen, Gesellschaftsformen und Phrasen zu Unternehmen
  • Database: Liefert Feldnamen, Datentypen und weitere Datenbank-relevante Informationen
  • Date: Liefert Datumsangaben in verschiedenen Bereichen sowie Monate oder Wochentage
  • Finance: Gibt beispielsweise IBANs aus, wobei Sie festlegen können, aus welchem Land diese stammen und ob diese formatiert sein sollen. Außerdem liefert diese Klasse Geldbeträge, Transaktionstypen, Währungen, Kreditkartennummern, Prüfziffern und vieles mehr.
  • Hacker: Liefert zufällige Abkürzungen, Adjektive, Nomen, Verben oder komplette Phrasen, allerdings alles nur auf Englisch.
  • Images: Hiermit können Sie beispielsweise URLs zum Download von Bildern abfragen, welche Bilder in den angegebenen Dimensionen liefern.
  • Internet: Erstellt E-Mail-Adressen, Benutzernamen, Domainnamen, Domainendungen, Portnummern, IP-Adressen, Kennwörter und vieles mehr.
  • Lorem: Bietet einige Zufallsdaten rund um die Erstellung von Texten. Hierbei können Sie einzelne Wörter, Absätze, Buchstaben, Sätze et cetera generieren lassen – allerdings nur auf Lateinisch!
  • Name: Liefert Vornamen, Nachnamen, komplette Namen, aber auch Berufsbezeichnungen
  • Phone: Liefert Telefonnummern
  • Rant: Liefert Reviews, allerdings nur auf Englisch
  • System: Liefert Dateinamen, Verzeichnisse (nur im Unix-Format), Dateiendungen, Versionsnummern, Texte von Ausnahmen, Fahrzeugnummern
  • Vehicle: Liefert Fahrzeughersteller, -modelle und -typen, VINs (Fahrzeugnummern) und Kraftstoffarten
  • Random: Liefert Zufallswerte für die verschiedenen Datentypen und in den angegebenen Bereichen

Zufallsdaten mit der Faker-Klasse

Mit den in den Klassen enthaltenen Funktionen können Sie die verschiedensten Daten ermitteln. Um dies auszuprobieren, erstellen Sie einfach eine neues Objekt auf Basis der Klasse Bogus.Faker und greifen dann direkt auf die Klassen aus der obigen Auflistung und die darin enthaltenen Funktionen zu.

Im folgenden Beispiel schreiben wir den Code direkt in die Main-Klasse der LINQPad-Datei:

Sub Main
     Dim objFaker As New Bogus.Faker
     Debug.Print(objFaker.Name.FirstName)
End Sub

Dies gibt einfach einen zufällig gewählten Nachnamen im Direktbereich aus. Auf die gleiche Weise probieren Sie auch die anderen Funktionen dieser und anderer Klassen aus.

Adressdaten für Deutschland

Beim Ausprobieren von Funktionen wie Address.Street-Address, Address.ZipCode oder Address.City werden Sie feststellen, dass die Daten sich auf englische Adressen beziehen.

Sie können allerdings leicht auf deutsche Anschriften umschwenken, indem Sie beim Erstellen der Faker-Klasse den Wert “de” als Parameter übergeben. Die folgenden Zeilen liefern beispielsweise direkt deutsche Namen und Adressdaten:

Dim objFaker As New Bogus.Faker("de")
Debug.Print(objFaker.Name.FirstName)
Debug.Print(objFaker.Address.StreetAddress)
Debug.Print(objFaker.Address.ZipCode)
Debug.Print(objFaker.Address.City)

Kunden anlegen

Nachdem Sie aus dem Beitrag Datenzugriff mit .NET, LINQPad und LINQ to DB (www.access-im-unternehmen.de/1358) wissen, wie Sie neue Datensätze mit den gewünschten Feldwerten zu einer Tabelle wie tblKunden hinzufügen, haben Sie nun prinzipiell alle Techniken zum Erstellen von auf Zufallsdaten basierenden Datenbankinhalten zur Hand.

Sie brauchen die Anweisungen zum Füllen der Felder nur noch mit den oben vorgestellten Funktionen der verschiedenen Klassen des Bogus.Faker-Objekts zu füllen.

Dann müssten wir allerdings für jeden Kunden ein neues Bogus.Faker-Objekt erstellen. Das brauchen wir jedoch nur ein einziges Mal zu tun, denn die Bogus.Faker-Klasse bietet eine Methode namens Generate an. Mit der können Sie, wenn Sie für den Parameter einen Zahlenwert angeben, eigentlich sogar gleich mehrere Objekte gleichzeitig erzeugen, aber diese können wir im aktuellen Kontext nicht verarbeiten. Also nutzen wir die Generate-Methode nur zum Erstellen eines Kunden gleichzeitig.

Bevor wir mit dem eigentlichen Code zum Erstellen einsteigen, deklarieren wir noch eine Enum-Auflistung für das Geschlecht – wozu wir diese benötigen, erläutern wir anschließend:

Public Enum Gender
     Male = 0
     Female = 1
End Enum

Die Prozedur KundenAnlegen erwartet die Anzahl der anzulegenden Kunden als Parameter. Dann deklariert sie die benötigten Variablen:

Public Sub KundenAnlegen(intMenge As Int32)
     Dim Beispielkunde As New tblKunden
     Dim objUserQuery As UserQuery
     Dim i As Int32
     Dim intGender As int32

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar