Datenbank zwei Werte multiplizieren!

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    Datenbank zwei Werte multiplizieren!

    Moin! :)
    Ich möchte gerne zwei Werte aus einer MS-SQL Datenbank multiplizieren.

    SQL-Abfrage

    1. SeitenAnzahl * proSeiteKosten

    Leider erscheint immer eine Fehlermeldung!
    Meldung 8117, Ebene 16, Status 1, Zeile 13
    Der Operanddatentyp nvarchar(max) ist für den multiply-Operator ungültig.

    Ich habe bereits mit CAST/CONVERT/REPLACE gearbeitet.
    Leider ohne Erfolg!
    Da ich in SQL noch recht neu bin, benötige ich eure Hilfe. :thumbup:
    BIG THX

    SQL-Code:


    Inhalt der Tabelle:



    Edit2:
    Ich habe versucht den Datentyp zu ändern.
    Anstatt 2 Euro sagt es einfach 200 Euro.
    Warum? ?(


    Edit3:
    Ich habe eine Lösung gefunden.
    Und möchte gerne wissen ob dieses gut ist.

    SQL-Abfrage

    1. SELECT (proSeiteKosten / 100 * SeitenAnzahl) AS Verdienst

    Ich lese die proSeitenKosten aus wenn z.B 200Cent dann geteilt durch 100Cent.
    Dann habe ich den Preis diesen multipliziere ich mit der SeitenAnzahl.
    Und jetzt habe ich, den aktuellen Verdienst.
    Ich glaube aber, es gibt bestimmt eine bessere Lösung.
    Visual Basic.NET 8o
    MS-SQL
    8o

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

    Mit Strings (NVARCHAR) rechnet man auch nicht. Du schreibst in C# ja auch nicht:

    C#-Quellcode

    1. string Amount1 = "200€";
    2. string Amount2 = "100€";
    3. string Result = Amount1 * Amount;
    Wie das in VB.NET aussieht, kannst dir denken.

    Sachen wie das Zeichen an einen Betrag anhängen, das machste später in der Anwendung.
    Und da sehe ich schon das nächste. Auftragsdatum? Das sollte ein DATETIME2 sein und kein NVARCHAR(50).
    Ist dir überhaupt bewusst, was NVARCHAR(MAX) bedeutet?

    Wie speicherst und lädst du denn Daten in die Datenbank?
    @EaranMaleasi
    Was genau bedeutet NVARCHAR(50)?
    Ich glaube das bedeutet dass ein String genau 50 Zeichen lang sein darf.

    Ist dir überhaupt bewusst, was NVARCHAR(MAX) bedeutet?
    Und das bedeutet, dass der String bis zum MAX Wert gefüllt werden darf.
    Und dies kostet mehr Systemleistung, und wird nicht empfohlen!?
    Sollte man deshalb, nicht mit MAX arbeiten? ?(
    Und falls "Ja", wann? ?(
    Danke, für den Tipp mit Auftragsdatum als datetime2.

    Tabelle erstellen…

    VB.NET-Quellcode

    1. Dim sql_code7 As String =
    2. "CREATE TABLE tblDruckerauftragLogs(
    3. ID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    4. Auftragsdatum datetime2(7),
    5. DokumentName nvarchar (MAX),
    6. FarbEinstellung nvarchar (50),
    7. SeitenAnzahl nvarchar (MAX),
    8. Drucker nvarchar (MAX),
    9. Kosten nvarchar (MAX),
    10. proSeiteKosten nvarchar (MAX),
    11. Wer nchar(40) NULL)"
    Visual Basic.NET 8o
    MS-SQL
    8o
    Kosten und sonstige Zahlen sollten auch mit dem entsprechendem Datentypen gespeichert werden. Also zum Beispiel decimal.
    Es gibt in SQL glaub sogar einen Datentype "money" :D
    Das ist meine Signatur und sie wird wunderbar sein!
    @Cheffboss warum sind die Spalten SeitenAnzahl, Kosten und proSeitenKosten überhaupt vom Typ NVARCHAR? Das sind doch alles Zahlen, dass seh ich schon am Namen.
    Die Datentypen in MSSQL lassen sich fast 1:1 nach .NET übersetzen bzw. anders herum. Dann baue deine Tabelle auch so, dass sie dem Entspricht, mit dem du in deiner Anwendung arbeitest.

    Außerdem hab ich nach Laden und Speichern gefragt, also Insert/Update und Select. Vor allem aber, wie dein Code um diese Befehle herum aussieht, also nicht nur die reinen SQL Befehle, sondern wie du in VB.NET das aufbaust.
    @EaranMaleasi
    Die Spalten SeitenAnzahl, Kosten und proSeitenKosten sind Zahlen.
    Deshalb werde ich diesen Datentyp ändern!
    Ich werde nächste Woche weiter arbeiten...
    Danke, für deine Hilfreichen Tipps.
    Ich werde mich über MS-SQL-Datentypen, nochmals intensiv beschäftigen.
    :thumbup:


    edit2:
    Ich habe nun die Tabellen Datentypen angepasst.
    Jetzt läuft mein Programm so, wie es soll.
    Hier unten die Lösung!
    Ich weiß dass der Code noch nicht perfekt ist,
    aber er ist nun viel besser als davor.
    Ich werde mich nochmals in das Thema Datentypen in SQL einarbeiten.
    Ich danke euch für eure Hilfreichen Tipps. :thumbup:
    BIG THX

    Code:

    SQL-Abfrage

    1. Dim sql_code7 As String =
    2. "CREATE TABLE tblDruckerauftragLogs(
    3. ID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    4. Auftragsdatum datetime2(7),
    5. DokumentName nvarchar (MAX),
    6. FarbEinstellung nvarchar (MAX),
    7. SeitenAnzahl int,
    8. Drucker nvarchar (MAX),
    9. Kosten money,
    10. proSeiteKosten money,
    11. Wer int)"

    Visual Basic.NET 8o
    MS-SQL
    8o

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