Oracle
 sql >> Base de données >  >> RDS >> Oracle

c# lit la table SQL (avec des caractères spéciaux) dans DataSet

Voici une solution possible, mais elle n'a pas été testée, alors gardez cela à l'esprit !

J'ai rencontré un problème similaire il y a quelque temps avec des caractères spéciaux dans Oracle. Nous avons notre jeu de caractères sur UTF-16. Avait des choses bizarres comme des trémas et d'autres caractères ascii en dehors de la plage normale 32-127.

Une chose que vous pourriez essayer est d'abord de faire un encodage HTML sur tout ce qui se trouve en dehors de cette plage, de le charger dans votre table de données en c#, puis pendant que la table de données se remplit (ou après qu'elle a été remplie...), effectuez un décodage html sur ces champs.

Nous avons une fonction d'encodage html qui fait cela pour nous, comme ceci :

  FUNCTION HTML_Encode_Special_Characters
   (p_string IN VARCHAR2,
    p_do_encode IN VARCHAR2 DEFAULT 'Y')
  RETURN VARCHAR2 IS
    first_location number := REGEXP_INSTR(p_string, '([^' || CHR(1) || '-' || CHR(127) || '])');
    v_string VARCHAR2(32000);
    v_char VARCHAR2(1 char);
    v_ascii_number number;
  BEGIN
    IF p_do_encode = 'Y' AND first_location > 0 THEN
      v_string := p_string;

      FOR i IN first_location .. length(v_string) LOOP
        v_char := substr(v_string,i,1);
        v_ascii_number := ascii(v_char);
        IF v_ascii_number > 128 THEN
          -- just replace all of them
          v_string := REPLACE (v_string, v_char,'&#' || v_ascii_number || ';');
        END IF;
      END LOOP;

      RETURN (v_string);
    ELSE
      RETURN p_string;
    END IF;

  END;

Cela devrait donc charger des données "chaîne" dans votre table et dans tous les cas où vous avez des caractères spéciaux, cela apparaîtrait comme '½' ou quelque chose du genre.

Ensuite, côté C#, vous pouvez faire quelque chose avec le décodage html :

using System.Web;

HttpUtility.HtmlDecode(mystring);

Encore une fois... non testé. Mais il devrait être très facile à mettre en œuvre et à tester et/ou à modifier légèrement pour le faire fonctionner.

Une solution alternative serait également d'effectuer simplement un datafix sur votre base de données pour changer tous ces caractères spéciaux en représentations "régulières" (c'est-à-dire, un tiret cadratin en un tiret normal). Vous pouvez le faire avec certaines expressions régulières, en utilisant la fonction CHR(), et pour afficher des données impaires en utilisant la fonction DUMP().