2016-05-18 4 views
2

J'ai un problème d'encodage avec la requête de SQLite.Net. Tout fonctionne bien si je n'utilise que les noms de colonnes dans le SQL String, mais si j'écris le SQL moi-même, tous les caractères spéciaux comme ä, ü, ö, ß ne seront pas encodés correctement. Voici deux exemples simples, l'un fonctionnant, l'autre non.WPU SQLite.Net.SQLiteConnection.Query problème d'encodage

public class ass { 
     [PrimaryKey, AutoIncrement] 
     public int _id { get; set; } 
     [MaxLength(255)] 
     public string sortname { get; set; } 
    } 

    dbConn = new SQLiteConnection(new SQLitePlatformWinRT("testpasswort"),DB_PATH); 
    dbConn.CreateTable<ass>(SQLite.Net.Interop.CreateFlags.None); 

    //add a test entry with special chars 
    ass asss = new ass(); 
    asss.sortname = "oe=öae=äszett=ß"; 
    dbConn.Insert(asss); 

    //now select the test entry to an ass object 
    List<ass> getass = dbConn.Table<ass>().ToList<ass>(); 
    //the list is filled and sortname = "oe=öae=äszett=ß" 

    //now fake a object with 
    List<ass> sqlass = dbConn.Query<ass>("SELECT 'oe=öae=äszett=ß' as sortname FROM ass").ToList<ass>(); 
    //the List is filled and sortname = "oe=�ae=�szett=�" 

Je sais que la requête est inutile et cela devrait fonctionner:

List<ass> sqlass = dbConn.Query<ass>("SELECT sortname as FROM ass").ToList<ass>(); 

Mais le problème est que le Funktion .query ont un problème d'encodage, cela ne fonctionnera pas:

List<ass> sqlass = dbConn.Query<ass>("SELECT sortname FROM ass WHERE sortname LIKE '%ä%'").ToList<ass>(); 

Mais cela fonctionnera:

List<ass> sqlass = dbConn.Query<ass>("SELECT sortname FROM ass).ToList<ass>().Where(v => v.sortname.Contains("ä")); 

chaque fois que j'ai un caractère spécial dans le sqlcode cela ne fonctionnera pas, cela est fatal pour mes besoins, parce que j'ai beaucoup de remplacer (colonne, trouver, remplacer) et toutes échouent si la chaîne find or replace contient ü, ö, ä [...]

Est-ce que quelqu'un savait comment faire?

+0

Avez-vous essayé d'utiliser des paramètres quelque chose comme ceci 'Liste sqlass = dbConn.Query ("SELECT sortname DE ass OU COMME sortname?", @ "A") ToList ().' – jomsk1e

Répondre

1

Une solution possible consisterait à utiliser @params au lieu d'une requête de chaîne directe. Et utilisez le pragma UTF-8 encoding, que vous pouvez également utiliser pour vérifier votre encodage de base de données existant. Une description utile pour ce problème peut être trouvée here.

+0

Merci, ça fonctionne parfait. – 2red13