Datenbankabfrage von Dezimal zahlen (mysql = Punkt, Dataset = Komma)

  • VB.NET
  • .NET 5–6

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

    Datenbankabfrage von Dezimal zahlen (mysql = Punkt, Dataset = Komma)

    Servus Leute,

    ich habe einen Datensatz in einer Datenbank (MySQL). Dort sind Dezimalzahlen enthalten. Diese Dezimalwerte haben in MySQL den Trennzeichen PUNKT(.). Wenn ich jetzt mittels MySQLDataAdapter diese Werte in mein Dataset laden will, erhalte ich immer folgende Fehlermeldung.

    Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints."


    So sieht der MySQLDataAdapter:

    VB.NET-Quellcode

    1. Dim preisverlaufcmd As New MySqlDataAdapter("SELECT * from preisverlauf", conn)


    Wie kann ich denn nun die Werte in mein Dataset laden? Leider kann ich in weder in MySQL (MariaDB) und im Dataset das Trennzeichen nicht ändern.

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

    @trix0 VB6 oder .NET 6? Ja was denn nun? Beides zusammen geht nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @trix0 VB6 oder .NET 6? Ja was denn nun? Beides zusammen geht nicht.


    sorry, hatte mich verklickt gehabt.

    ja, es handelt sich um ein typ. dataset.

    __________________EDIT_______________________
    Habe es gelöst bekommen. Bei der SQL-Abfrage gibt es eine Replace Funktion. Diese habe ich zwar gestern schon ausprobiert, nur anscheinend falsch. Heute hab ich die mir genauer Angeschaut und nun geht es. Die Lösung:

    VB.NET-Quellcode

    1. Dim preisverlaufcmd As New MySqlDataAdapter("SELECT
    2. `ID`,
    3. REPLACE
    4. (`Einkauf`, '.', ',') As `Einkauf`,
    5. `LieferantID`,
    6. `ProductID`,
    7. REPLACE
    8. (`Verkauf`, '.', ',') As `Verkauf`,
    9. `Datum`,
    10. `SKU`,
    11. `ANZAHL`
    12. FROM
    13. `preisverlauf`", conn)


    Ganz wichtig hier, das

    VB.NET-Quellcode

    1. As `Verkauf`
    bzw.

    VB.NET-Quellcode

    1. (`Einkauf`, '.', ',') As `Einkauf`
    , da er sonst im Dataset eine eigene Spalte generiert, die eben lautet:

    SQL-Abfrage

    1. REPLACE
    2. (`Einkauf`, '.', ',')
    bzw.

    SQL-Abfrage

    1. REPLACE
    2. (`Verkauf`, '.', ',')

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „trix0“ ()

    trix0 schrieb:

    Diese Dezimalwerte haben in MySQL den Trennzeichen PUNKT(.).
    Nein.
    Dezimalzahlen haben keinen Punkt. Und auch kein Komma. Dezimalzahlen sind Dezimalzahlen - das ist sicherlich auch bei MySql so.
    Klär mich bitte auf:
    1. wie lautet der MySql-Name des MySql-Datentyps für Dezimalzahlen?
    2. Verwendest du diesen MySql-Datentyp auch in deiner MySql-Datenbank - oder verwendest du da einen MySql-Datentyp für Text (text, char, varchar, oder sowas??
    Deine "Lösung" jedenfalls erzeugt Text - nämlich textuelle ZahlenDarstellung in deutscher Kultur.
    Dazu folgendes:
    1. Die Werte sind nun Text (String) - keine Zahlen (etwa Decimal) mehr.
    2. Die Sortierung von Text ist anders als die von Zahlen. Der Text "9,25" ist grösser als der Text "119,25", während die Zahl 119,25 natürlich grösser ist als 9,25.
    3. Ist auf einem Rechner englische Kultur eingestellt erhälst du massive Fehlfunktionen.