sql >> Database teknologi >  >> RDS >> Oracle

c# læste SQL Table (med specialtegn) ind i DataSet

Her er en mulig løsning, men den er utestet, så husk det!

Jeg stødte på et lignende problem for noget tid siden med specialkarakterer i Oracle. Vi har vores karaktersæt til UTF-16. Havde mærkelige ting som omlyd og andre ascii-tegn uden for det normale 32-127-område.

En ting, du kan prøve, er først at lave en HTML-indkodning til noget uden for dette område, indlæse det i din datatabel i c#, og derefter, mens datatabellen udfyldes (eller efter den er blevet udfyldt...), skal du udføre en html-afkodning på disse felter.

Vi har en html encode funktion, der gør dette for os, som sådan:

  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;

Så dette burde indlæse "streng"-data i din tabel, og ethvert tilfælde, hvor du har specialtegn, vil det dukke op som '½' eller noget i den retning.

Så på C#-siden kunne du gøre noget med html-afkodning:

using System.Web;

HttpUtility.HtmlDecode(mystring);

Igen... uafprøvet. Men det burde være meget nemt at implementere og teste og/eller justere det lidt for at få det til at fungere.

En alternativ løsning ville også være blot at udføre en datafix på din database for at ændre alle disse specialtegn til "almindelige" repræsentationer (dvs. en em-bindestreg til en normal bindestreg). Du kan gøre det med nogle regulære udtryk ved at bruge CHR()-funktionen og for at se ulige data ved hjælp af DUMP()-funktionen.




  1. Hvad er den bedste måde at slette duplikerede værdier fra MySQL Table?

  2. Følgerklynger – 3 store brugssager til synkronisering af SQL- og NoSQL-implementeringer

  3. Sådan undslipper du enkelte citater i Doktrin

  4. Konverter 'datetime offset' til 'smalldatetime' i SQL Server (T-SQL-eksempler)