Je suis actuellement confronté à un problème ennuyeux et je serais heureux de recevoir un aperçu.Caractère de fin supplémentaire lors de la récupération de varchar2 à partir d'Oracle 11g avec ASP.Net core 2 avec OracleClient
Je développe une application simple qui récupère certains enregistrements d'un oracle 11g db et les affiche. J'utilise le noyau 2 ASP.Net et le package System.data.OracleClient pour établir une connexion à la base de données.
Cependant, quand je fais une sélection simple et retreive champ varchar2 comme l'extrait suivant:
// Init connection
var connection = new OracleConnection(connectionString);
// Create query command
OracleCommand cmd = connection.CreateCommand();
cmd.CommandText = "select * from mytable";
// Execute query
var reader = cmd.ExecuteReader();
// Go through all retreived raw and display only the string fields
while (reader.Read()) {
object[] rawRow = new object[reader.FieldCount];
foreach(var o in rawRow) {
if(o is string){
// Display the string
}
}
}
Je retreive la chaîne avec une poubelle arrière supplémentaire ombles comme: « maValeur 翽 » Le 翽 est vraiment un extra char, il n'est pas présent dans le champ stocké dans le db. Quand j'utilise sql + client, je n'ai pas ce caractère.
Si un problème pressenti la charset, mais comme le charbon i un supplémentaire et le champ de valeur contient ascii ombles seulement, il ne doit pas être ...
Clochette de quelqu'un?
DBM Oracle 11g
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET WE8MSWIN1252
Merci à l'avance
Edit:
Client: Oracle 12C conf chemin et reg (soit 32 ou 64 bits):
NLS_LANG FRENCH_FRANCE.WE8MSWIN1252
Edit 2:
Le caractère supplémentaire peut changer, obtenu ꌽ, ⌴ et quelques autres. Il ressemble vraiment à un problème de conversion de charset, mais au niveau du connecteur :(
Edit 3:.
Je viens de tester avec le client Oracle à base de mono non officielle (Mono.Data.OracleClientCore) et je reçois les mêmes résultats, maintenant je doute que ce soit le connecteur Peut-être que les clients OCI ne lisent pas le chemin ou la conf ...
Vous pouvez vérifier exactement ce qui est dans la colonne de la table avec 'select dump (mycolumn, 1016) de mytable', mais vous penseriez que SQL \ * Plus le montrerait. Quel est le NLS_LANG pour SQL \ * Plus, et l'équivalent pour votre application? C'est, dans les deux cas, le jeu de caractères du client plutôt les jeux de caractères du serveur que vous avez déjà inclus. –
Ma variable d'environnement NLS_LANG est définie sur FRENCH_FRANCE.WE8MSWIN1252, comme le serveur :(La sauvegarde: Typ = 1 Len = 6 CharacterSet = WE8MSWIN1252: 50,45,52,4e, 4f, 54 et je reçois "Pernot 翽" – grifos
Quelle est votre chaîne de connexion? – MiguelKVidal