Autor Beitrag
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Mi 24.06.09 22:23 
Hallo Leute!

Ich habe mal wieder ein kleines Problem.

Ich betreibe eine Datenbankanwendung, auf diese wird von verschiedenen Rechnern zugegriffen. Die Ländereinstellung der Rechner ist Deutsch, außer von einem Messrechner, der hat die Einstellung Englisch(USA). Jetzt gibt es natürlich ein Problem bei Berechnungen, da der US Rechner ein Punkt statt Komma erwartet. OK, ich habe eine Lösung mittels CultureInfo.InvariantCulture.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private double ToDouble(string parseStr)
{
  parseStr = parseStr.Replace(","".");
  return double.Parse(parseStr, System.Globalization.CultureInfo.InvariantCulture);
}

Bei dieser Lösung muss ich jedoch jeden einzelnen Wert Parsen und das würde mir viel Arbeit bereiten und die Anwendung hätte auch mehr zu tun. Von daher bin ich mit dieser Lösung leider nicht zufrieden. Gibt es einen anderen Weg, oder habe ich jetzt die A-Karte gezogen?


Über Anregungen & Tipps freue ich mich wie immer!

Gruß
Christoph
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: Do 25.06.09 09:13 
Hallo Christoph,

ich verstehe noch nicht, in welchem Zusammenhang das Problem überhaupt relevant wird. Ein double ist ein double, egal in welcher CultureInfo. Wenn du den Datenaustausch nicht mit Strings, sondern mit dem jeweils richtigen Datentyp vornimmst, kann es keine Probleme geben.

Wenn das Problem die Sql-Befehle sind, dann gilt der generelle Hinweis: Erzeuge sie niemals mit String-Verknüpfung, sondern immer mit Parametern! Ausführliche Erläuterungen findest du in [Artikelserie] Parameter von SQL Befehlen.

Die Zusammenarbeit mit String.Replace und double.Parse ist auch jeder ungünstig. Wenn du so arbeitest, dann sollte die ursprüngliche Kultur bei double.Parse angegeben werden und nicht der Umweg über Replace. Dafür gibt es schließlich double.Parse in der Version:
ausblenden C#-Quelltext
1:
double value = double.Parse(parseStr, System.Globalization.CultureInfo.CurrentCulture);					


Oder habe ich eine Situation übersehen? Jürgen
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Do 25.06.09 15:33 
Hallo Jürgen!

Vielen Dank für deine Hinweise! Also, die Probleme treten beim einlesen von Dateien des Messrechners(der US Rechner) auf, die Daten werden an das DB-System übergeben. Ich habe heute morgen die Doku studiert :les: und bin dabei zu folgender Lösung gekommen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
using System.Globalization;
using System.Security.Permissions;
using System.Threading;

[assembly: SecurityPermission(SecurityAction.RequestMinimum, ControlThread = true)]

namespace HPManager
{

    public partial class MainForm : Form
    {
       public void Form1_Load(object sender, EventArgs e)
       {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"false);
       }
    }
}


So läuft der Thread der Application in der gewünschten Ländereinstellung. Diese Lösung gefällt mir.


Also, noch mal vielen Dank für deine interessanten Hinweise!


Gruß
Christoph