Alle Instanzen einer Klasse innerhalb einer Klasse durchgehen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    also ich verstehe dein vorhaben Ziel nicht wie in Post#17 beschrieben

    Meine anfängliche Idee war nun mit Klassen zu arbeiten. Eine Klasse für die Spalteneigenschaften, eine für die Tabelleneigenschaften und eine mit Funktionen, die geerbt werden


    sagen wir haben eine Tabelle Kunden(Spalten: KdNr;Vorname;Nachname;Strasse..etc..)
    welche Tabelleneigenschaften ? ich sehe als eigenschaft den Namen der Tabelle

    bei Spalteneigenschaften ist es schon logischer, du hast eine PrimeryKey;Text;Datum;Double;Decimal
    mit Funktion meinst du ? daraus Insert;Select;Update;Delete Sql Erstellen?

    vielleicht anhand einer Einzelnen Tabelle beschreiben was passieren soll
    Alle Tabellen, inkl. deren Spalte und deren Datentypen etc.:
    docs.microsoft.com/de-de/dotne…?view=dotnet-plat-ext-5.0
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Wie ist denn die richtige Herangehensweise? Mein Plan ist es bislang, die Tabellen im Quellcode zu definieren und dann von meiner Anwendung in der Datenbank erstellen zu lassen. Das hatte ich früher mal gemacht und kam damit klar. Die Beispiele in Büchern, Tutorials etc. erklären entweder das Erstellen von Tabellen, das Einfügen und Abfragen von Daten mit SQL-Befehlen oder es gibt Beispiele mit bestehenden und meist bereits gefüllten Tabellen, bei denen dann mit DataTable, DataSet usw. gearbeitet wird. Alles sehr interessant, aber es bleibt bei mir eine große Verständnislücke. Am „Anfang“ habe ich eine leere Datenbank auf dem Webserver und am „Ende“ möchte ich mit meiner Anwendung Daten in Tabellen schreiben und abfragen. Wie die Tabellen aussehen sollen und welche Relationen es geben soll, steht jetzt schon fest.
    Welcher Weg ist der richtige um sozusagen vom „Anfang“ zum „Ende“ zu gelangen? Wie wird das üblicherweise gemacht? Dazu finde ich irgendwie gar nichts. Händisch eine Datenbank mit allen Tabellen erstellen und ebenfalls das 1:1 dazu passende DataSet im Visual Studio? Die Tabellen der so erzeugten Datenbank dann später in die Datenbank des Webservers kopieren (sofern das überhaupt so geht)?


    Zur Nachfrage von Kasi:
    Mit "Tabelleneigenschaften" meinte ich auch die darin enthaltenen Spalten.
    --------
    Lieber inkompetent als inkontinent

    mrMo schrieb:

    Alle Tabellen, inkl. deren Spalte und deren Datentypen etc.:
    Und die Relations?
    Also das relationale an der relationalen Datenbank, sind die auch mit drin?
    Oder sind dafür weitere Aufrufe der Überladungen erforderlich?
    Und du hast SqlConnection.GetChanges() verlinkt, der TE arbeitet aber mit MysqlConnection, und da liefert .GetChanges() eine ganz annere DataTable (wenn überhaupt).

    100Volt schrieb:

    Mein Plan ist es bislang, die Tabellen im Quellcode zu definieren und dann von meiner Anwendung in der Datenbank erstellen zu lassen.
    Sowas kann EntityFramework.CodeFirst.
    (Hat MrMo im selben Link empfohlen, wie wo er das komische mit den DataSet aufbrachte. Und EF.CodeFirst ist imo auch der wichtigere Hinweis dieses Posts)
    Dataset kann sowas wie gesagt nicht.
    Man kann wie gesagt, allerlei Metadaten abrufen - und die werden in Form von DataTables geliefert. (Hier habich mich geirrt: Man muss die Metadaten nicht in DataTables tun, sondern sie werden gleich als DataTable geliefert).

    Ja, ist aber imo nicht sehr interessant, wenn du die DB erstmal aufsetzen willst. Also quasi die Situation erstmal erschaffen, deren Beschreibung du späterhin mit Connection.GetSchema() abrufen kannst.

    100Volt schrieb:

    ...die Tabellen im Quellcode zu definieren und dann von meiner Anwendung in der Datenbank erstellen zu lassen....
    Wie ist denn die richtige Herangehensweise?
    Wie gesagt, sind dir drei Ansätze für vorgelegt worden:
    1. (Halte dich an MrMo) EF könnte deinen Plan umsetzen, nur Frage ist, ob EF dein MariaDB auffm WebHost unterstützt.
    2. (Halte dich an Kasi) Du kannst deinen Plan so umsetzen wie du es dir ausgedacht hast: Schreib jede Menge Code, der ein Script emitiert, was du auf deiner Db ausführen kannst.
    3. (Halte dich an mich) Ich hab mal ein Tool gebastelt, "DBGenerator", das kann ein typisiertes Dataset auslesen, und davon ein Script generieren, was eine kompatible Datenbank aufsetzt.
      Zuvor müsstest du allerdings Datenmodellierung erlernen, und wie man ein typDataset sinnvoll konstruiert.
      Datenmodellierung musst du sowieso erlernen, weil wenn das Datenmodell nicht funktioniert wird es die Anwendung auch nicht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ich habe mich meinem Ziel quasi von zwei Seiten genähert. Einmal der Ansatz mit meinen Klassen, die den Tabellenaufbau repräsentieren und andererseits das Definieren von Tabellen im DataSet Designer des VS und das anschließende Erstellen der Tabellen und Relationen per Code (selbst programmiert, da ich den vorgeschlagenen DB Generator und andere Codeschnipsel nicht richtig verstanden habe). Das Erstellen der Tabellen und anschließende Anlegen der Relationen in der Datenbank des Webservers klappt gut.
    Mit der zweiten Variante (DataSet Designer im VS) dürfte ich deutlich besser fahren, denke ich. Zufällig habe ich ganz tolle Tutorials (die „vier Views“, in zehn Teilen) gefunden. Toll gemacht und ganz viel von dem drin, was ich brauche. Leider sind die Verweise zu den Videos an vielen Stellen ungültig, so daß sie erst spät gesehen habe. Hätte mir viel Arbeit und blöde Frage gespart, aber lieber spät als nie… :)

    Ein paar Fragen sind geblieben bzw. neu entstanden:

    Welchen Datentyp verwende ich bei mySQL 5.7 für Zeiten (also x Sekunden), die ich später (stundenweise/tageweise) zusammenrechnen möchte? Beim SQL Server gibt es Timespan, aber bei mySQL nicht.

    Welchen Datentyp verwende ich für Bilder?

    Auf welchem Weg füttere ich Tabellen im DataSet mit Daten (z.B. Meßdaten), die meine Anwendung erzeugt, also keine Benutzereingabe sind? Im Video „Vier Views VIII“ ca. Min. 4:30 wird verboten was ich so ungefähr getan hätte.

    Wenn einige Tabellenspalten nur bestimmte Inhalte haben dürfen (z.B. nur Buchstaben und Ziffern von 1-4), wo prüfe ich das idealerweise? Im CellValidating-Ereignis des DataGridViews? Oder bei derartigen Anforderungen die Eingabe besser über Textboxen realisieren?
    --------
    Lieber inkompetent als inkontinent
    Welchen Datentyp verwende ich bei mySQL 5.7 für Zeiten (also x Sekunden), die ich später (stundenweise/tageweise) zusammenrechnen möchte? Beim SQL Server gibt es Timespan, aber bei mySQL nicht.



    hier ein bsp. die Gesamt stunden zu addieren, mit sekunden oder minuten kannst du das ableiten

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim tb As DataTable = New DataTable
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. tb.Columns.Add("ID")
    5. tb.Columns.Add("Stunden")
    6. tb.Rows.Add("1", "08:03")
    7. tb.Rows.Add("2", "01:01")
    8. tb.Rows.Add("3", "04:32")
    9. DataGridView1.DataSource = tb
    10. End Sub
    11. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    12. 'addiere Zeit zu Gesamtstunden
    13. Dim ts As TimeSpan = New TimeSpan(
    14. (From row As DataGridViewRow In DataGridView1.Rows
    15. Where row.Cells(1).FormattedValue.ToString() <> String.Empty
    16. Select DateTime.ParseExact(row.Cells(1).FormattedValue, "HH:mm", Nothing).TimeOfDay.Ticks
    17. ).Sum())
    18. Dim z1 As String = String.Format("{0:00}:{1:00}", _
    19. Math.Floor(ts.TotalHours), ts.Minutes)
    20. TextBox1.Text = z1 & " ges. Stunden"
    21. End Sub
    22. End Class

    100Volt schrieb:

    Welchen Datentyp verwende ich bei mySQL 5.7 für Zeiten (also x Sekunden), die ich später (stundenweise/tageweise) zusammenrechnen möchte? Beim SQL Server gibt es Timespan, aber bei mySQL nicht.
    Das steht in der Doku zu mySQL 5.7.
    Ich empfehle aber, Zeiten als Fliesskommazahl abzubilden, und die eiglich vorgesehenen Datetypen zu ignorieren.
    Mit Zahlen kann man vernünftig rechnen - bei Timespan kriegst du einen Hirnschlag, wenn du versuchst, eine Summe zu bilden, oder gar einen Mittelwert.

    100Volt schrieb:

    Welchen Datentyp verwende ich für Bilder?
    lies die Doku. Muss ieine Form von Binary-Feld sein.
    Übrigens für Binary-Felder (LOB) empfehle ich dringend besondere Datenmodellierungs-Regeln:
    Nämlich sämtliche LOBs auslagern in eine Extra-LOB-Tabelle.
    Dann kannst du Arbeits-Daten schnell abrufen, und die LOBs erst hinzu-laden, wenn du sie wirklich brauchst.

    100Volt schrieb:

    Auf welchem Weg füttere ich Tabellen im DataSet mit Daten (z.B. Meßdaten), die meine Anwendung erzeugt, also keine Benutzereingabe sind? Im Video „Vier Views VIII“ ca. Min. 4:30 wird verboten was ich so ungefähr getan hätte.
    Wird schon seinen Grund haben.
    Ich hab das Vid lange nicht mehr angeguckt - was wird denn da verboten?
    Aber um die Frage zu beantworten: Benutze die typisierten Add-Methoden:

    VB.NET-Quellcode

    1. dim newMesswert As MessWertRow = myDataset.MessWert.AddMessWertRow(1, 2, 3)
    Verboten sind die untypisierten Add-Methoden.