Typkonvertierung

Hallo.

Ich lese ein Texfeld aus, wandel es in einen Double und möchte ihn dann in die DB eintragen.

Die Spalte in der DB ist als numeric deklariert.

Wenn ich den Bsp.-Wert 35.2 eintragen möchte, meckert er.

Im Textfeld steht 35PUNKT2, der Debugger kann aber dann nicht 35KOMMA2 in die DB eintragen.

Sind double und numeric kompatibel? Kann numeric überhaupt kommawerte? oder will der punktwerte, bzw. nur glatte Werte?

Du kannst keine numerischen Dinge mit Komma eintragen. Warum machst Du denn aus dem Text, der schon den Punkt enthält, erst aus dem Punkt ein Komma?

Wenn Du Komma bei der Ausgabe willst: dafür gibt es to_char().

Andreas

Da du in deiner Applikation angegeben hast, dass das Deutsch ist, macht er bei Zahlen ein “,” bei der ToString() Methode. Darum solltest Du das auf en-US einstellen, dann gibt es keine Probleme bzw. es mit dem CommandBuilder machen! Dort sollte er automatisch einen “.” verwenden.

Dnake akretschmer und progs für die antworten.

Also, ich wandel die punkteingabe nicht in einen kommawert.
Der Debugger von Visual Studio zeigt mir das nur an.

Ich soll das komplette Visual Studio neuinstallieren unter einer anderen Sprache?? Das ist doch nicht Sinn der Sache.

Das Problem ist ja mehr, dass der Debugger schreibt, es steht “” drin.
Habe das mit einem anderen Editfeld probiert. Da hat der Debugger den Wert angezeigt, allerdings nicht in die DB geschrieben.

Kann numeric also keine Komma bzw. durch punkt getrennte Werte aufnehmen?

Du sollst nicht VS auf Englisch machen sondern Deine Anwendung, Applikation (bzw. den aktuellen Thread) auf Englisch stellen, damit bei der Konvertierung von double in string nicht “,” sondern “.” genommen wird. Oder als Alternative den CommandBuilder, dieser müsste das so viel ich weiß automatisch erkennen.

Nummeric kann Kommawerte aufnehmen, jedoch mit “.” als Dezimaltrenner und NICHT mit “,”.

Als Alternative könnte evtl. auch sowas funktionieren (aber ist sehr sehr sehr extrem unsauber)

double num = 1.4;
string zahl = num.ToString().Replace(',','.');

Hallo AndreasBeginner,

“Benutze für variable Inhalte eines SQL-Befehls niemals String-Verknüpfung, sondern immer DbParameter!”

Deine Länderabhängige Konvertierung führt der ADO.NET Provider durch und das solltest du nicht manuell machen.

Wie liest du die Spalte/Tabelle aus und wie trägst du es ein? Poste bitte diese beiden Codeabschnitte, damit ich dir deinen Fehler zeigen kann.

Habe es jetzt über den Umweg gelöst, das Textfeld als globale Variable zu nutzen.

Hier der Codeausschnitt:

Public Shared Test As Double
...
Test = Convert.ToDouble(K14txt.Text)
...
weight = ((100.0 - Test) * temp2) / temp3
weight = System.Math.Round(weight)
...
conn.open()
...
command.CommandText = "select UpdateFunc('Tabelle', ' set weight=''" & weight & "''', 'where name=''" Statement"''')"
command.ExecuteNonQuery()
...
conn.close()

Kannst du bitte den komplette Source zwischen conn.Open() und conn.Close() posten. Auch würde ich gerne deine Funktion sehen.

Konnte das Problem lösen:

Es lag daran, dass die Replace Funktion nur einen String ändern kann, nicht einen double.

Thread kann geschlossen werden :wink:

Sowas steht aber auch in der MSDN und ist nur einen Tastendruck entfernt. Außerdem zeigt auch Visual Studio einen Fehler an, der einen sofort darauf hinweißt.