Laden...

SQlite, Umlaute

Erstellt von WSX vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.455 Views
W
WSX Themenstarter:in
32 Beiträge seit 2007
vor 16 Jahren
SQlite, Umlaute

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;
}

"Arbeit ist die altmodische Form der Vermögensbildung in Arbeitnehmerhand."

Wolfram Weidner (*1925), dt. Journalist

3.971 Beiträge seit 2006
vor 16 Jahren

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...

F
10.010 Beiträge seit 2004
vor 16 Jahren

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.

L
333 Beiträge seit 2007
vor 16 Jahren

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/

N
98 Beiträge seit 2006
vor 16 Jahren

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!

L
333 Beiträge seit 2007
vor 16 Jahren

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/