Trennzeichen für Gleitkommazahlen (Double)

spacesister

Grünschnabel
Hallo,
da ich mich bisher nur mit php und Java beschäftigt habe bin ich mit diesem Problem noch nie konfrontiert worden...

Ich arbeite mit VB.net, Visual Studio 2003 (deutsch), .net Framework 1.1

Ich möchte eine kleine grafische Oberfläche erstellen und von dieser Daten in eine MySQL DB schreiben und auslesen. Das auslesen klapp inzwischen auch wunderbar (schade, das VS für jede DB -außer MySQL - einen Konnektor zur Verfügung stellt) jetzt mein INsert bin ich auf ein blödes Problem gestoßen....

In meinem Textfeld habe ich 0.6705

wenn ich dann insert klicke, wir dieses sub ausgeführt
Code:
    Private Sub btnInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInsert.Click
        Dim exRate As Double = Val(txtExchange.Text)
        Dim dateStr As String

        dateStr = txtDate.Text

        dbcon.dbCon()
        dbcon.add(exRate, dateStr)
        DataGrid1.DataSource = dbcon.getData()
    End Sub

in einer anderen Klasse wird dann die DB Verbindung ausgebaut und der qry ausgeführt

Code:
    Public Function add(ByVal rate, ByVal datum) ',  datum date)
        'Dim mess As String = "insert"
        'Return mess

        Dim qry As String
        data = New DataTable

        qry = String.Format("INSERT into exchangerate_tbl (rate,ex_date) values (' {0}', '{1} ')", rate, datum)

        da = New MySqlDataAdapter(qry, conn)
        cb = New MySqlCommandBuilder(da)

        Try
            da.Fill(data)
        Catch ex As MySqlException
            MessageBox.Show("Error inserting data: " + ex.Message)
        End Try

    End Function

im Debugg modus sehe ich dann als INhalt für den qry:
Code:
"INSERT into exchangerate_tbl (rate,ex_date) values (' 0,6705', ' 10. 04. 2007 ')"

ich nehme an, das das an das ich das irgendwie über diese culture-class einstelle kann, ich weiß nur nicht wie. Und eigentlich hätte ich das auch gerne liebe generell fürs gesamte Projekt geregelt und nich für jede einzelne Variable ...
achso, der qry wir ausgeführt und ein Datensatz [ ID 0 0000-00-00] angelegt ... ganz klasse!

und wo ich grad dabei bin .. mit dem Datum as sit auch merkwürdig ich habe das bisher probiert

Code:
// Textfeld füllen       
 myDate = System.DateTime.Today
  txtDate.Text() = mydate.ToString(" dd.MM.yyyy")

//Textfeld auslesen
  myDate = Date.FromOADate(txtDate.Text)

//Umformatieren - alternativ würde ich es auch als date an die DB sene, wenn das geht
   dateStr = myDate.ToString("yyyy-MM-dd")


ich hoffe, die Infos reiche - wäre klasse, wenn mir jemand helfen könnte ...
Gruß und Dank
 
Hallo spacesister! (*g* cooler nick :))

Willkommen im Forum!

Du musst die Gleitkommazahl entsprechend der aktuell eingestellten Region Parsen und solltest sie im englischen Formt abspeichern. Die aktuell eingestellte Region, die zum Formatieren und Parsen von Strings verwendet wird, findest in dem statischen Property System.Threading.Thread.CurrentThread.CurrentCulture. Dort lässt sie sich auch ändern, was aber nicht, vorgenommen werden sollte, nur um mal eine Zahl zu konvertieren.

//Edit: hab mal fix ein Beispiel gemacht.
C#:
double d = double.Parse( "0,1", System.Threading.Thread.CurrentThread.CurrentCulture );

CultureInfo cultureInfo = new CultureInfo( "en-US" );

string s = d.ToString( cultureInfo );
Achte bitte bei'm Parsen auf das aktuell eingestellte Dezimal-Trennzeichen, da sonst der Gleitkommazahlenbereich einfach abgeschnitten wird.
 
Zuletzt bearbeitet:
Hi und willkommen im Forum

:offtopic:
(schade, das VS für jede DB -außer MySQL - einen Konnektor zur Verfügung stellt)
Das stimmt so nicht.
[klugscheiss]Ersten ist es das .NET-Framework, dass die DataAdapter mit liefert[/klugscheiss:D] und es werden nur DataAdapter für SQL Server, Oracle und ein Allgemeiner mitgeliefert.
Für alle anderen DBMS gibt es diese jedoch auch. Die kannst du auf der Homepage des entsprechenden Herstellers downloaden, was ich auch empfehle.
 
Erstmal danke für die Hilfe!

System.Threading.Thread.CurrentThread.CurrentCulture
ok, und wie würde ich das ändern? Im VS, im Explorer ...?


es geht mir nicht darum, das ich nur mal eben eine Variable ändern will, sondern viel mehr darum, das ich eigentlich in England studiere -dementsprechend dort auch immer das amerikanische Format benutz wird- und ich nicht immer, wenn ich meine Programme statt auf meinem PC in der Uni laufen lasse alles ändern muss


was meist du, was ich getan habe?
Aber obwohl ich MySQL jetzt nutzen kann, finde ich es nach wie vor nicht unter "verbinden mit Datenbank"
Das einzige Plugin, das ich gefunden hab, war für Visual Studio 2005, das ich nciht nutzen möchte.
 
Also damit Du bei'm Parsen und Konvertieren nicht ständig eine extra Culture angeben musst, kannst auch die Programmsprache umstellen:
Code:
Imports System.Globalization
Imports System.Threading

Public Class Form1

    Public Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        Dim cultureInfo As New CultureInfo("en-GB")
        Thread.CurrentThread.CurrentCulture = cultureInfo

    End Sub
End Clas
 
Zurück