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
SQlite, Umlaute
WSX
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

SQlite, Umlaute

beantworten | zitieren | melden

verwendetes Datenbanksystem: SQlite
Guten Morgen,
ich hab sei einigen Monaten eine SQlite Anwendung laufen, die bei uns im Betrieb eigentlich jedem gefällt, das einzig störende dabei ist, dass keine Umlaute aus der Datenbank gelesen werden können, egal ob mit ExecuteScalar(), oder mit dem DataReader, oder mit Dataadapter.
Hab auch schon gegoogelt wie ein Böser, aber finde keine mir verständliche Lösung, bzw. vielleicht eine Funktion, mit der ich ausgelesene Werte sofort Encoden kann.

Hoffe mal dafür hat irgendwer eine Lösung parat, liegt wahrscheinlich sicherlich daran, dass ich in der Schule damals geschlafen hab als es um solche Sachen ging, die Datenbank ist derzeit UTF-16 big endian.
Hatte aber auch schon UTF-8, bzw. UTF-16, UTF-16(le) probiert. Es ist halt leider nervig für den Endanwender wenn er keine Sonderzeichen zur Verfügung hat. Bzw. Sendungen mit komischen Schriftzeichen den Betrieb verlassen.

Vielen Dank im Voraus

also in meiner Klasse mit den ganzen Connectionstrings, (sind mehrere, da die Anwendung auch viel mit MySql, und Firebird arbeitet) steht dann mal grob gekürzt irgendwo...


cn.ConnectionString = "Data Source=KD.db3";
cm.Connection = cn;
cn.Open();

und im Programm selbst schaun die Aufrufe eigentlich immer folgendermaßen aus. Hier mal ein Beispiel.


private string return_city_from_zipcode(string country, string zipcode)
{
sl.cm.CommandText = @"Select city from define_countryzipcodes
where country=@selcountry and zipcode like @selzipcode";
sl.cm.Parameters.AddWithValue("selcountry", country);
sl.cm.Parameters.AddWithValue("selzipcode", zipcode);

string value ="";

try
{
sl.open();
value = sl.cm.ExecuteScalar().ToString();
}

catch (Exception e)
{
value = "";
}

finally
{
sl.close();
}
return value;
}
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von WSX am .
"Arbeit ist die altmodische Form der Vermögensbildung in Arbeitnehmerhand."

Wolfram Weidner (*1925), dt. Journalist
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 3.971
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

Es liegt "nur" an deinem SQL-Statement beim Auslesen, zum. ist das bei MySQL so. In MySQL beispielsweise gibt es dazu die Funktion CHARSET, die die Zeichen in dem gewünschtem Zeichensatz ausgibt
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.986

beantworten | zitieren | melden

Nö, bei SQLite ist es nicht der SqlString, sondern der Connectionstring.

Aber im grunde ist es nichtmal das, denn SQLite liefert nur das zurück, was
reingeschrieben wird.
Lediglich Zahlenformate werden umgewandelt.

Schau also lieber mal nach, was Du wie reinschreibst.
private Nachricht | Beiträge des Benutzers
LonelyPixel
myCSharp.de - Member



Dabei seit:
Beiträge: 333
Herkunft: Erlangen

beantworten | zitieren | melden

Werden die Daten mit C# in die SQLite-Datenbank geschrieben und mit dem gleichen Programm auch wieder gelesen? Und das klappt nicht? Seltsam. Ich hab jetzt schon in mehreren Programmen ohne irgendwelche Zeichensatz-Vorkehrungen einfach drauf los Daten reingeschrieben und wieder rausgelesen - das geht mit Umlauten, griechisch oder japanisch einwandfrei. Ich weiß gar nicht mal, wie die Datenbank das genau auf der Platte speichert, vermutlich UTF-8 (das ist glaub ich die Vorgabe). Und da C# durchweg mit Unicode-Zeichenketten arbeitet, ist mir das auch ziemlich egal.

Zur Info: Ich verwende diese Bibliothek für SQLite.NET:
http://sqlite.phxsoftware.com/
private Nachricht | Beiträge des Benutzers
NovemberRain
myCSharp.de - Member



Dabei seit:
Beiträge: 98

beantworten | zitieren | melden

Hallo,

Ich habe das selbe Problem wie der Threadersteller. Wenn ich das jetzt richtig verstanden habe dann gibt SQLite immer das zurück was reingeschrieben wird, also auch in dem Format. Nun verwende ich für die Datenbankpflege ein anderes Tool(SQLite Administrator) mit dem ich die Tabellen erstelle und per CSV Dateien fülle. Leider bietet dieses Programm aber keine Möglichkeit den Zeichensatz zu verändern und mein Programm liest Umlaute und Sonderzeichen falsch aus. Gibt es ne simple und vor allem resourcenschonende Möglichkeit die ausgelesenen Werte in das richtige Format zu bringen? Ich nehme an das .Net mit UTF8 arbeitet.

Danke schonmal für eure Hilfe!
private Nachricht | Beiträge des Benutzers
LonelyPixel
myCSharp.de - Member



Dabei seit:
Beiträge: 333
Herkunft: Erlangen

beantworten | zitieren | melden

Das hier könnte dir helfen, die CSV-Dateien vor dem Import in die gewünschte Kodierung zu bringen:
http://beta.unclassified.de/projekte/fileconvert/
private Nachricht | Beiträge des Benutzers