Oracle
 sql >> Datenbank >  >> RDS >> Oracle

c# liest SQL-Tabelle (mit Sonderzeichen) in DataSet

Hier ist eine mögliche Lösung, aber sie ist ungetestet, also denken Sie daran!

Ich bin vor einiger Zeit auf ein ähnliches Problem mit Sonderzeichen in Oracle gestoßen. Wir haben unseren Zeichensatz auf UTF-16 eingestellt. Hatte seltsame Dinge wie Umlaute und andere ASCII-Zeichen außerhalb des normalen Bereichs von 32-127.

Eine Sache, die Sie versuchen könnten, ist, zuerst eine HTML-Codierung für alles außerhalb dieses Bereichs durchzuführen, diese in c# in Ihre Datentabelle zu laden und dann, während die Datentabelle gefüllt wird (oder nachdem sie gefüllt wurde ...), eine HTML-Decodierung für diese Felder durchzuführen.

Wir haben eine HTML-Encode-Funktion, die das für uns erledigt, etwa so:

  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;

Dies sollte also "String"-Daten in Ihre Tabelle laden, und in jedem Fall, in dem Sie Sonderzeichen haben, würde es wie '½' oder etwas Ähnliches angezeigt werden.

Dann könnten Sie auf der C#-Seite etwas mit HTML-Decodierung machen:

using System.Web;

HttpUtility.HtmlDecode(mystring);

Wieder ... ungetestet. Aber es sollte sehr einfach zu implementieren und zu testen und/oder leicht anzupassen sein, damit es funktioniert.

Eine alternative Lösung wäre auch, einfach eine Datenfixierung in Ihrer Datenbank durchzuführen, um all diese Sonderzeichen in "normale" Darstellungen zu ändern (dh ein Em-Bindestrich in einen normalen Bindestrich). Sie können dies mit einigen regulären Ausdrücken tun, indem Sie die CHR()-Funktion verwenden, und ungerade Daten mit der DUMP()-Funktion anzeigen.