Announcement

Collapse
No announcement yet.

Umlautprobleme mit C# und SQLite

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Umlautprobleme mit C# und SQLite

    Ich brauche dringend Hilfe mit SQLite Version 3 und C# (Visual Studio Express 20120)

    Es besteht eine Datenbank die nicht abgeändert werden kann. Die Felder die auszulesen sind, sind vom Typ „varchar“. Ich soll zwei zusätzliche Programme in C# schreiben. Das Problem dabei ist dass die deutschen Umlaute nicht richtig dargestellt werden. Dabei habe ich schon alle möglich SQLite Connection Strings mit jeglicher Codierung ausprobiert (UTF8,UTF16 und ASCII).
    Dabei habe ich folgenden Code verwendet:

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SQLite;
    
    namespace SQLite64FormDBTest
    {
        public partial class Form1 : Form
        {
            const string DataSourceFile = @"D:\Test\Werkstattoffice\automan.crm; ";
            const string DataSourceVersion="Version=3; ";
            const string EncodingAscii="Encoding=ASCII;";
            const string EncodingUTF8="UTF8Encoding=true;";
            const string EncodingUTF16="UTF16Encoding=true;";
    
                   
            public Form1()
            {
                InitializeComponent();
            }
    
             private void buttonClose_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
             private void buttonGo_Click(object sender, EventArgs e)
             {
                 
                 const string sql = "select * from tblKunde;";
                 var conn = new SQLiteConnection("Data Source=" + DataSourceFile + DataSourceVersion + EncodingUTF8);
                 try
                 {
                     conn.Open();
                     DataSet ds = new DataSet();
                     var da = new SQLiteDataAdapter(sql, conn);
                     da.Fill(ds);
                     grid.DataSource = ds.Tables[0].DefaultView; //DataSet wird ins DataGridView übernommen
                 }
                 catch (Exception)
                 {
                     throw;
                 }
    
             }
                   
        }
    }
    Es geht dabei nur um die Methode buttonGo_Click(), welche das DataSet mit den Daten aus der Datenbank füllt. Jedoch werden die deutschen Umlaute falsch dargestellt. Das Problem ist dass es sich dabei nur um ein Zeichen, für alle Umlaute handelt, so dass man die Umlaute daraus nicht differenzieren kann. Wie muss ich vorgehen damit dieses Problem behoben werden kann?
    Muss ich irgendwie mit System.Text.Encoding arbeiten ? Ich finde im Netz keinen richtigen Ansatz. Daher bitte ich um Hilfe!
    Vielen Dank im voraus!
    Zuletzt editiert von Josef Laub; 11.02.2014, 13:56.

  • #2
    Hallo,

    das Encoding könnte tatsächlich falsch sein, vgl. mit http://www.codeproject.com/Articles/...sing-System-Da
    (suche nach SQLite encoding)
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Originally posted by Markus Lahr View Post
      Hallo,

      das Encoding könnte tatsächlich falsch sein, vgl. mit http://www.codeproject.com/Articles/...sing-System-Da
      (suche nach SQLite encoding)
      Ja, ohne mich näher damit beschäftigt zu haben, ist erfahrungsgemäß folgendes denkbar.
      Ein Client mit falschem Encoding liest und schreibt Daten in die DB und zwar für sich genommen konsistent.
      Ein Programm, dass das richtig macht, stellt die "Alt" Daten entsprechend falsch dar. Ein Update der falschen Daten aus dem korrekten Programm führt sehr wahrscheinlich zu einer Fehldarstellung im Altprogramm.

      Man müsste mit verschiedenen Encoding Verfahren testen, ob man die falsche Variante findet. GGf auch die Rohdaten analysieren.
      Möglich ist evtl. auch das ein Font verwendet wird, der die codierten Buchstaben nicht oder anders in seinem Vorrat hat.
      Ein Einsatz von Multibyte / Unicode Textspalten bedingt auch den Einsatz von entsprechenden Fonts im darstellenden Programm.
      Gruß, defo

      Comment


      • #4
        Hallo Markus,
        zuerst mal Danke für deinen Hinweis. Ich habe gestern den ganzen Tag damit verbracht, nach den richtigen Encoding-Maßnahmen zu suchen. Leider vergebens!. Das einzige was ich erreicht habe ist, ein Datenbanktool SQLiteStudio Version 2.1.5. Damit habe ich die Datenbank verbunden und mir die Firmendatensätze ausgeben lassen. Die Umlaute wurden dabei richtig dargestellt. Hilft diese Information weiter um das Problem zu lösen?

        Gruß Josef Laub

        Comment


        • #5
          Hallo defo,
          Danke für deinen Beitrag!
          wie teste ich diese Encoding-Verfahren? Weist Du einen Link. Ich schaffe es nicht mal diese Varchar - Felder mit .GetBytes() auszulesen. Das mit den Fonts erscheint mir nicht als richtig, da ich eine Testdatenbank erstellt habe in die ich selbst Umlaute reingeschrieben und anschließend wieder ausgelesen habe. Dabei wurden die Umlaute richtig dargestellt.
          Gibt es eine dir bekannte IDE für Sqlite mit anderen Wrappern, da es nicht zwingen C# mit .NET sein muß?

          Gruß Josef Laub

          Comment

          Working...
          X