Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie SQL Server Varchar Wert mit Umlauten in C# String umformen?
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

Wie SQL Server Varchar Wert mit Umlauten in C# String umformen?

beantworten | zitieren | melden

Hallo an Alle!


ich muss eine Datenbankabfrage auswerten. Diese Abfrage wird an einen Microsoft SQL Server gestellt. Die Spalte mit den Daten beinhaltet die Straßennamen der Adressen. Wie im deutschen üblich, beinhalten die Straßennamen ja auch umlaute...

In der Datenbank sind die Umlaute noch vorhanden. Wenn ich aber die Abfragewerte in einen string umwandle, werden die Umlaute durch ein "?" ersetzt.

Hier mal mein code:



  using (SqlConnection connection = new SqlConnection(GetConnectionString()))
             
            {
                using (SqlCommand command = new SqlCommand("mb_bdb_p_addressdata", connection))
                {

                    command.CommandType = System.Data.CommandType.StoredProcedure;
                    command.Parameters.Add(new SqlParameter("@pC_name", name));

                    connection.Open();

                    SqlDataReader reader = command.ExecuteReader();
  
                    while (reader.Read())
                    {
 
                        result.Name = reader["street"].ToString();
 
                    }
 
                    connection.Close();
                }
            }


Wenn ich mir nun den string aus result.Name ausgeben lasse wird der Wert zum Beispiel "Bl?tenstra?e" ausgegeben.

Wie kann ich die Ausgabe/Zeichen richtig in einen C# string umwandeln?


Für einen Tipp bin ich sehr Dankbar!

Gruß Mike
private Nachricht | Beiträge des Benutzers
stups
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

Hallo Mike,

das ist nicth das normale Verhalten bei einer SQL-Verbindung. Infolgedessen solltest du/müssen wir uns Gedanken darüber machen, was in deiner Umgebung speziell ist. Bitte gib uns mehr Informationen über:

Die verwendete SQL-Server-Version
Die installierte SQL-Client-Version
Die Version der Laufzeitumgebung (.NET)
Besondere Zeichensätze an der SQL-Datenbank
installierte Locales an deinem Client-PC

etc.

Danke!
private Nachricht | Beiträge des Benutzers
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

beantworten | zitieren | melden

als Laufzeitumgebung habe ich ein VisualStudio 2010 c# Projekt für einen WebService.Das heist die gespeicherte Datenbankprozedur mb_bdb_p_addressdata wird in einer Methode meines WebServices aufgerufen. Als Laufzeitumgebung habe ich .Net 3.5. Dieser WebService wird auf einem IIS7 gehostet.

Über die Datenbank kann ich nicht so viel sagen. Ich habe nicht so viel Erfahrung mit Datenbanken. Es ist wohl eine Mircosoft SQL server DB.

um mir die DB inhalte anzuzeigen verwende ich das Microsoft SQL Server ManagementStudio. Wie ich mit diesem Programm die Informationen zu Datenbank rausbekomme weis ich zZ nicht.

gruss Mike
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von mikefried am .
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.111

beantworten | zitieren | melden

Müsste es vielleicht nvarchar sein?
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1.177

beantworten | zitieren | melden

huhu,
Zitat von chilic
Müsste es vielleicht nvarchar sein?

muss nicht, kann aber. In der Tat ist nvarchar unicode und varchar abhängig von der Einstellung in Server, Datenbank, Tabelle, Feld. Lässt sich bei allem per Collate einstellen.

Überprüf bitte, ob die Daten vom Webservice richtig kommen (z.B. per Fiddler) und der Client das ruiniert oder ob am Webservice eine Änderung vorgenommen werden muss.

Prinzipiell sollte man die "String-Spalten" am DB-Server auf Unicode umstellen, sonst wirds auch nix mit griechisch, türkisch oder gar chinesisch.

:-)

Xynratron
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Xynratron am .
Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

beantworten | zitieren | melden

Also erst mal vielen Dank für Eure Tipps.

Die Datenbank kann ich nicht ändern! Ich muss irgendwie die Abfrage so ändern das ich diese dann in C# richtig bekomme? Ich könnte also nur die gespeicherte Prozedur in der Datenbank ändern.

Von den Einstellungen in der Datenbank habe ich keine Ahnung.

Wie bekomme ich denn raus wo die Zeichen, die ja noch richtig in der DBZelle stehen verädert werden?

Gruss Mike
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1.177

beantworten | zitieren | melden

huhu,
Zitat von mikefried
Wie bekomme ich denn raus wo die Zeichen, die ja noch richtig in der DBZelle stehen verädert werden?

Die Daten in der "DBZelle" werden nur im Managementstudio richtig angezeigt. Geändert werden sie nirgends, nur die Anzeige ist falsch.
Zitat
Überprüf bitte, ob die Daten vom Webservice richtig kommen (z.B. per Fiddler) und der Client das ruiniert oder ob am Webservice eine Änderung vorgenommen werden muss.

:-)

Xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

Zitat
Wie bekomme ich denn raus wo die Zeichen, die ja noch richtig in der DBZelle stehen verädert werden?
Hat doch Xynratron bereits geschrieben. Die Daten gehen höchstwahrscheinlich auf dem Weg Service -> Client kaputt und nicht DB -> Service. So wie du es beschrieben hast, liegt doch ein Service dazwischen, oder?
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

beantworten | zitieren | melden

Nein es liegt kein Service dazwischen da ich versuche den Service zum Datenabfragen der Datenbank zu erstellen. Also ich versuche diesen Service zu implementieren.
private Nachricht | Beiträge des Benutzers
stups
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

Bitte poste doch mal folgende Daten:

Serverversion
Clientversion auf der Service-Maschine
Sortierungs-Einstellung der Datenbank und der betreffenden Spalte
den Connection-String (Passwort bitte nicht...)

Danke!
private Nachricht | Beiträge des Benutzers
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

beantworten | zitieren | melden

also ich habe mal im Microsoft SqlServermanager mit der rechten MT auf den Server geklickt und dann auf Eigenschaften. Im sich öffnenten Fenster steht dann:

Produkt: Microsoft SQL Server
BS: Microsoft Windows NT
Plattform: NT
Version:9.00....
Sprache:Deutsch
Serversortierung: Latin1_General_CI-AS

Was ist denn mit Clientversion auf der Service-Maschine gemeint?

Den Connectionstring erstelle ich mit der FKT:


 private string GetConnectionString()
    {
        string ret = String.Empty;

        ret += "server=" + ConfigurationManager.AppSettings.Get("Data_Source") + ";";
        ret += "database=" + ConfigurationManager.AppSettings.Get("database") + ";";
        ret += "User Id=" + ConfigurationManager.AppSettings.Get("UserID") + ";";
        ret += "Password=" + ConfigurationManager.AppSettings.Get("Password") + ";";

       
        return ret;

    }

wobei Data_Source, database nur einfache namen sind.

Gruss Mike
private Nachricht | Beiträge des Benutzers
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

beantworten | zitieren | melden

Ich habe eben auf

http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-connecting-connection-string.html

gelesen das man im ConnectionString das encoding mit angeben muss wenn man utf8 haben möchte. nur funktioniert dies nicht bei mir....

wenn ich meine Methode


  private string GetConnectionString()
    {
      
        string ret = String.Empty;

        ret += "server=" + ConfigurationManager.AppSettings.Get("Data_Source") + ";";
        ret += "database=" + ConfigurationManager.AppSettings.Get("database") + ";";
     
        ret += "User Id=" + ConfigurationManager.AppSettings.Get("UserID") + ";";
        ret += "Password=" + ConfigurationManager.AppSettings.Get("Password") + ";";

        //ret += "CharSet=UTF8;";
        ret += "Charset = latin1;";
        
       

        return ret;

    }

um ret += "Charset = latin1;"; oder ret += "CharSet=UTF8;"; erweitere bekomme ich immer eine Exception mit der Fehlermeldung

Schl?sselwort wird nicht unterst?tzt: 'charset'

wie soll man dann das encoding mit angeben?

Gruss Mike
private Nachricht | Beiträge des Benutzers
trashkid2000
myCSharp.de - Member



Dabei seit:
Beiträge: 156

beantworten | zitieren | melden

Naja, das gilt halt, wie man schon am Namen der Seite sieht, für MySql.
Aber Du hast Doch MSSql, oder. Und da wird das Ganze nicht klappen.

Also wenn Du Die Datenbank nicht irgendwie umstellen kannst, dann bleibt Dir wohl beim Abfragen der Daten eine manuelle Konvertiertung nach UTF-8


str = Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(str));
und vor eventuellem speichern wieder zurück.
LG, Marko
private Nachricht | Beiträge des Benutzers
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

beantworten | zitieren | melden

ja war eine MySql sache habe ich nicht gesehen sorry,

nur weis ich nicht wie ich die Antwort der Anfrage konvertieren kann?

Wie am Anfang geschrieben lese ich ja den Stassennamen wie folgt aus:




result.Name = reader["street"].ToString();


In Name steht dann schon ein falscher Wert "?" für die Umlaute

Gruss Mike
private Nachricht | Beiträge des Benutzers
trashkid2000
myCSharp.de - Member



Dabei seit:
Beiträge: 156

beantworten | zitieren | melden

Na so?


result.Name = Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(reader["street"].ToString()));
private Nachricht | Beiträge des Benutzers
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

beantworten | zitieren | melden

Also ich muss alles zuruecknehmen!!!

Der Fehler liegt woanders!!!!

wenn ich mir per SoapUI ansehe, welche Daten mein WebService sendet,
ist alles richtig. Die Umlaute wie zum Beipsiel äüöß werden richtig übertragen.

nun gilt es diese richtig per PHP anzuzeigen.


Für Eure Hilfe noch mals vielen Dank!!!

Gruss Mike
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

So viel zum Thema
Zitat
So wie du es beschrieben hast, liegt doch ein Service dazwischen, oder?
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
mikefried
myCSharp.de - Member



Dabei seit:
Beiträge: 198

Themenstarter:

beantworten | zitieren | melden

also das Dingens soll so sein!


Ich habe eine datenbank auf einem Server. Diese hat alle Adressdaten der Kunden.
Nun soll ich einen Webservice schreiben der diese Daten erstmal anzeigen kann.

Also kann man dann eine HTML Seite per PHP erstellen, die die Daten von Herrn X anzeigt. Also greift php auf den Service zu.Dieser ist in C# geschrieben.

Gruss Mike
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1.177

beantworten | zitieren | melden

hi Mike,

naja, wenigstens reagierst du Fix auf Fragen und Antworten. Andere schaffen nichtmal das. Aber leider bist Du wiedermal ein etwas schlechtes Beispiel. Ich persönlich schimpfe meine (IT-)Lehrlinge immer kräftig, wenn sie mit einer Frage/Problem kommen, ohne beschreiben zu können, was sie eigentlich dazu bewegt hat, zu mir zu kommen.

Für die Zukunft, guck Dir bitte immer genau an, in welcher Umgebung "Der Fehler" auftritt. Dann findet man deutlich schneller Hilfe - sei es nun im Forum oder nur "per Google" - immer Hilfe. Und, je besser ein eigenes Wissen um die Materie ist, desto besser findest du auch die Ansatzpunkte.

HappyCoding

Xynratron

PS: und benutze doch Doppelpunkte statt Ausrufezeichen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Xynratron am .
Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers