Verzweiflung pur... nach tagelanger Suche im Netz gebe ich auf und frage hier mal nach:
In meiner SQL Datenbanktabelle habe ich einige Felder als decimal(x,y) definiert. Wenn ich nun eine ganze Zahl eingebe, wird diese ordentlich abgespeichert. Gebe ich eine Dezimalzahl ein, erhalte ich die Fehlermeldung:
"System.Data.SqlClient.SqlException: "Fehler beim Konvertieren des varchar-Datentyps in numeric."
Definition der Spalte in der SQL Datenbank:
Spaltenname: Wert / Datentyp decimal(3, 1)
Den zu übertragenden Wert lese ich aus einer TextBox aus, die im Laufe des Programms bereits als Zahl mit einer Nachkommastelle formatiert wird:
Was ich bisher herausfinden konnte, ist, dass es sich hier offensichtlich um einen Konflikt der Ländereinstellungen handelt - in der SQL Datenbank sind die Werte nach meinem deutschen Betriebssystem mit ',' dargestellt, VB.NET stellt die mit '.' dar. (Ich kann gar nicht glauben, dass das in der heutigen Zeit noch die Ursache sein kann... )
Ich habe auch schon mal probiert, den Wert in einen String zu konvertieren und den Punkt durch das Komma zu ersetzen - führt zum gleichen Fehler. Wäre auch nur ein Fix und keine Lösung (soll im Zweifel ja auch auf einem englischen Betriebssystem laufen, wo die SQL Datenbank dann wohl auch wieder einen Dezimalpunkt verwendet)
Das muss doch irgendwie einfach zu lösen sein - ich bin doch sicher nicht der Einzige, der versucht, eine Dezimalzahl in eine SQL Tabelle zu schreiben...
Danke schon mal für eure Mühen und Hilfe!
Gruß,
Ecki
In meiner SQL Datenbanktabelle habe ich einige Felder als decimal(x,y) definiert. Wenn ich nun eine ganze Zahl eingebe, wird diese ordentlich abgespeichert. Gebe ich eine Dezimalzahl ein, erhalte ich die Fehlermeldung:
"System.Data.SqlClient.SqlException: "Fehler beim Konvertieren des varchar-Datentyps in numeric."
Definition der Spalte in der SQL Datenbank:
Spaltenname: Wert / Datentyp decimal(3, 1)
VB.NET-Quellcode
- Private Sub SQL_UpdateRecord(strTable As String)
- Dim strComm As String
- myConn.Open()
- myCmd.Connection = myConn
- strComm = "UPDATE " & strTable & " SET "
- strComm &= "Datenfeld1 = '" & Text_Datenfeld1.Text
- ' Auflistung weiterer Felder
- strComm &= "'Wert = '" & CDbl(Text_Wert.Text)
- ' Auflistung weiterer Felder
- strComm &= " ' WHERE ID =" & CInt(Text_ID.Text) & ""
- myCmd.CommandText = strComm
- myCmd.ExecuteNonQuery()
- myConn.Close()
- End Sub
Den zu übertragenden Wert lese ich aus einer TextBox aus, die im Laufe des Programms bereits als Zahl mit einer Nachkommastelle formatiert wird:
Was ich bisher herausfinden konnte, ist, dass es sich hier offensichtlich um einen Konflikt der Ländereinstellungen handelt - in der SQL Datenbank sind die Werte nach meinem deutschen Betriebssystem mit ',' dargestellt, VB.NET stellt die mit '.' dar. (Ich kann gar nicht glauben, dass das in der heutigen Zeit noch die Ursache sein kann... )
Ich habe auch schon mal probiert, den Wert in einen String zu konvertieren und den Punkt durch das Komma zu ersetzen - führt zum gleichen Fehler. Wäre auch nur ein Fix und keine Lösung (soll im Zweifel ja auch auf einem englischen Betriebssystem laufen, wo die SQL Datenbank dann wohl auch wieder einen Dezimalpunkt verwendet)
Das muss doch irgendwie einfach zu lösen sein - ich bin doch sicher nicht der Einzige, der versucht, eine Dezimalzahl in eine SQL Tabelle zu schreiben...
Danke schon mal für eure Mühen und Hilfe!
Gruß,
Ecki
Ecki P.
Microsoft Windows Home 10
Microsoft Visual Studio Community 2017 / Version 15.8.8
Microsoft SQL Server Management Studio 14.0.17289.0
.NET Framework 4.6.1
Es hat gar keinen Sinn, sich mit dem Programm zu streiten... am Ende hat es einfach immer Recht!