Dezimal Trennteichen VB.NET und MySQL

timee

Mitglied
Hi,

derzeit habe ich folgendes Problem!
Mit VB.NET verwalte ich Artikel mit ek (Einkaufspreis) und vk (Verkaufspreis) in Euro.
Wenn ich die Eingaben nun mit Double.Prase(xyz) in eine Variable schreibe und sie dann per cmd.ExecuteScalar() in die MySQL Datenbank schreibe habe ich das Problem, dass dort unter Decimal das Trennzeichen nicht "," (Komma) sondern "." (Punkt) ist!
Im Moment habe ich es so glöst, dass die DB auf varchar(5) steht, was mir aber nicht gefällt.
Übergebe ich in VB.NET einen Preis mir . (z.b. 1.90), erkennt er den Punkt nicht als Trennzeichen, sondern als Hundertertrennung und schreibt 190 in die DB.
Mit einer Funktion, welche den Punkt durch eun Komma ersetzt habe ich schon eingebaut, aber die DB muss dazu immer noch auf varchar(5) stehen.

Bekommt man das irgendwie anders gelöst?

THX
Timee
 
Ich hatte das selbe Problem. Ich weiss nicht wie du deine Daten genau in die Datenbank schreibst, ich jedenfalls habe meine Daten aus einer Textbox gelesen und per Update Befehl in die DB geschrieben. Sieht dann ungefähr so aus

Code:
dim str as string = textbox.text.Replace(",",".")

...
cmdStr = "UPDATE tabelle Set Preis = " & str & " WHERE ID = 2;"

'Preis' ist dann ein Double in der DB. So funktioniert es jedenfalls bei mir, vielleicht hilft es dir ja weiter.
 
Hast du dann die DB auf varchar, text oder so stehen?
Meine DB hatte ich am anfang auf Decimal (was mir am besten gefallen hat), den mit varchar(5) schneidet er die Nullen am Ende ab, was nicht so schön aussieht, so wir z.b. aus 1,90 nach dem DB Update eine 1,9
 
Moin,

SQL-CommandString so zusammenstellen verursacht IMMER Probleme - wie ja selbst festgestellt:mad:

Die eleganteste Lösung ist -> Verwendung von Parametern.

Beispielcode
Code:
public void PreisUpdate( string preis, int id)
{
MySqlCommand cmdStr = new MySqlCommand (  "UPDATE tabelle SET Preis = ?PREIS  WHERE ID = ?ID" );
cmdStr.Parameters.Add ( "?PREIS", MySqlDbType.Decimal, 5 );
cmdStr.Parameters.Add ( "?ID", MySqlDbType.Int16, 0 );
...
}
Hier wird erstmal das Statement vorbereitet und kann dann wie folgt aufgerufen werden:
Code:
PreisUpdate ( meineTextBox.Text,  meineDatensatzID );

Der Vorteil von Parametern ist u,.a. der, dass die Datenbank bzw der DBServer den übergebenen Parameterwert automatisch in das Datenbank-conforme Format umwandelt; in Eurem Fall z.B. das deutsche Gleitkomma-Format in das allgemein übliche US-Gleitkomma-Format -> will sagen: das dt. Dezimaltrennzeichen wird entsprechend in das US-Dezimaltrennzeichen umgewandelt.

Weitergehende Informationen zu Parametern siehe u.a. hier::google: http://dev.mysql.com/doc/refman/5.1/de/index.html (MySqlCommand.Parameters)

Das Bsp. oben ist in C# dürfte aber ohne grosse Probs auf VB umzusetzen sein...

Rainer
 
Moin,

SQL-CommandString so zusammenstellen verursacht IMMER Probleme - wie ja selbst festgestellt:mad:

Die eleganteste Lösung ist -> Verwendung von Parametern.

Beispielcode
Code:
public void PreisUpdate( string preis, int id)
{
MySqlCommand cmdStr = new MySqlCommand (  "UPDATE tabelle SET Preis = ?PREIS  WHERE ID = ?ID" );
cmdStr.Parameters.Add ( "?PREIS", MySqlDbType.Decimal, 5 );
cmdStr.Parameters.Add ( "?ID", MySqlDbType.Int16, 0 );
...
}
Hier wird erstmal das Statement vorbereitet und kann dann wie folgt aufgerufen werden:
Code:
PreisUpdate ( meineTextBox.Text,  meineDatensatzID );

Der Vorteil von Parametern ist u,.a. der, dass die Datenbank bzw der DBServer den übergebenen Parameterwert automatisch in das Datenbank-conforme Format umwandelt; in Eurem Fall z.B. das deutsche Gleitkomma-Format in das allgemein übliche US-Gleitkomma-Format -> will sagen: das dt. Dezimaltrennzeichen wird entsprechend in das US-Dezimaltrennzeichen umgewandelt.

Weitergehende Informationen zu Parametern siehe u.a. hier::google: http://dev.mysql.com/doc/refman/5.1/de/index.html (MySqlCommand.Parameters)

Das Bsp. oben ist in C# dürfte aber ohne grosse Probs auf VB umzusetzen sein...

Rainer

Ahh, vielen Dank so ist es natürlich noch viel besser und eleganter ;) . Das mit den Parametern wollt ich sowieso schon mal genauer wissen, jetzt weis ichs, Danke ;-)

Kankomi
 
Zurück