Autor Beitrag
oneitis
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 14.05.10 17:46 
Wie in der Überschrift schon erwähnt, ich habe ein NumericUpDown Feld in dem ich einen Wert eingetragen habe, danach wird dieser mit convert.todouble in double (kaleingabe, eweingabe und kheingabe) konvertiert und danach wird noch durch 100 dividiert...
Somit entstehen in den meisten fällen auch Kommazahlen.
Wenn ich diese dann mit
ausblenden C#-Quelltext
1:
2:
sqlprodukteingabe = "INSERT INTO produkte(produkt, kalorien, eiweiss, kohlehydrate)" +
                        " Values('" + produkteingabe + "','" + kaleingabe + "','" + eweingabe + "','" + kheingabe + "')";

an meinen Sql Server übergeben will entsteht das problem, das in den Doublevariablen als Dezimaltrennzeichen "," verwendet wird und bei der Übergabe dann natürlich folgender Fehler auftritt:

Zitat:
Fehler beim Konvertieren des varchar-Datentyps in float.


Weil folgende Zeile übergeben wird:

INSERT INTO produkte(produkt, kalorien, eiweiss, kohlehydrate) Values('Steak','5','0,2','0,01')

Und damit natürlich die ganze Syntax versaut wird...
Jetzt hab ich schon versucht das ganze mit folgendem Code zu lösen... was aber keinen unterschied macht -.-
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
NumberFormatInfo nfi = new CultureInfo("en-US"false).NumberFormat;
            nfi.NumberDecimalSeparator = ".";
            double kaleingabe = Convert.ToDouble(numericUpDown1.Value, nfi);
            double eweingabe = Convert.ToDouble(numericUpDown2.Value, nfi);
            double kheingabe = Convert.ToDouble(numericUpDown3.Value, nfi);
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 14.05.10 19:14 
Dieses ständige Konvertieren ist weitgehend Quatsch und führt zu Fehlern. Decimal zu double zu string zu double. Lass das doch: Wenn du eine Zahl hast und als Zahl damit arbeiten willst, dann mach das einfach.
ausblenden C#-Quelltext
1:
double d = numericUpDown1.Value.ToDouble() / 100;					

Für SQL-Befehle sind Parameter zu verwenden, dann gibt es keine Formatierungsprobleme.
ausblenden C#-Quelltext
1:
2:
3:
4:
string sql = "INSERT INTO produkte(produkt, kalorien, eiweiss, kohlehydrate)" +
             " Values(@produkt, @kal, @ew, @kh)";
SqlCommand cmd = new SqlCommand(sql, connectionstring);
cmd.Parameters.AddWithValue("@produkt", produktValue);

produktValue usw. sind dabei double-Werte. (Wenn die DB-Tabelle entsprechend definiert ist, kannst du auch direkt mit den decimal-Werten arbeiten.)

Du siehst: Ich muss nirgends auf den Dezimaltrenner achten. Mehr zu Sql-Parametern findest du unter [Artikelserie] Parameter von SQL Befehlen

Gruß Jürgen

Nebenbei: Bezeichner wie numericUpDown1 sollten verboten werden, siehe .NET Richtlinien für Namen oder als Kurzfassung Namenskonventionen
oneitis Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 18.05.10 21:44 
Danke schön, hab mich zwar a bissl beschäftigen müssen mit den Parametern, aber jetzt siehts gleich viel besser aus und es funktioniert auch wie es soll...

Vielen herzlichen dank :) einfach klasse das forum hier :)

ps: ja ich weiß die namen, auch wenns nur für ein kleines projekt nur für mich ist... aber ich war echt zu faul...