2017-02-14 2 views
0

Ich arbeite an dem folgenden Problem und ich kann keine Antwort finden.Einfügen von Dezimalwerten in MySQL mit C#

Ich habe den folgenden Code bekommt:

public void CreateCmd (string g_cmd,params object[] g_params) 
    { 
     int i = 0; 
     MySqlCommand cmd = verbindung.CreateCommand(); 
     cmd.CommandText = g_cmd; 
     foreach(object param in g_params) 
     { 
      cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString()); 
      i++; 
     } 
     verbindung.Open(); 
     cmd.ExecuteNonQuery(); 
    } 

Das Verfahren funktioniert prima (bisher), aber wenn ich ein Doppel auf die MDB eingefügt werden soll wurde es von der Datenbank gekürzt (?). E. G .:

Der Code I die Methode mit nennen:

database.CreateCmd("INSERT INTO `orders` (`id`, `time`, `tax`, `netto`, `brutto`) VALUES(NULL, CURRENT_TIMESTAMP, ?param0, ?param1, ?param2)", 0.19, 201.5, 239.785); 

Der Eingang weicht ist in PHPMyAdmin gezeigt: Screenshot from PHPMyAdmin

Die Struktur der Tabelle (Ich habe verschiedene Daten versucht Typen): another cs of MDB

Ich hoffe, Sie können mir sagen, was ich falsch mache.

Grüße Polarety

+0

Vielleicht ist es zu früh und meine Räder haben noch nicht angefangen, sich zu drehen, aber was meinst du, wenn du "MDB" sagst? _Es lässt mich denken, dass Sie über MSAccess sprechen. _ – Uueerdo

+0

Ich verwende XAMPP mit MariaDB (MDB) anstelle von MySQL. Ich weiß, dass es fast gleich ist, aber ich weiß nicht, ob das der Grund ist, warum es nicht funktioniert hat. – Polarety

+0

AddWithValue kann nicht im Voraus wissen, was der Datentyp in der Datenbank ist, und so erstellt er einen String-Parameter aufgrund von ToString(), aber dies konvertiert Ihre Eingabe in eine Zeichenfolge unter Verwendung Ihrer Gebietsschemaeinstellungen. Die Datenbank mag kein Komma als Dezimaltrennzeichen und möchte einen Punkt. – Steve

Antwort

0

Es könnte eine Kultur Problem sein, in dem die Datenbank ein Komma (,) anstelle einen Zeitraum erwartet (.)?

Andernfalls überprüfen, ob die Datenbank-Setup UNSIGNED sein soll, gemäß der Dokumentation here für MariaDB

Auch, weil Sie Geld speichern, bitte von Gleitkommazahlen Probleme bewusst sein. Vielleicht solltest du stattdessen einen Fixpunkt in Betracht ziehen?

0

Rechts.

Nachdem ich

bearbeitet
cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString()); 

zu

cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString().Replace(",",".")); 

Es funktioniert. Vielen Dank!