sql >> Databasteknik >  >> RDS >> Oracle

c# läser SQL-tabell (med specialtecken) i DataSet

Här är en möjlig lösning, men den är oprövad så tänk på det!

Jag stötte på ett liknande problem för en tid sedan med specialtecken i Oracle. Vi har vår teckenuppsättning till UTF-16. Hade konstiga saker som omljud och andra ascii-tecken utanför det normala intervallet 32-127.

En sak du kan prova är att först göra en HTML-kodning till något utanför det intervallet, ladda det i din datatabell i c#, och sedan när datatabellen fylls (eller efter att den har fyllts i...), utför en HTML-avkodning på dessa fält.

Vi har en html-kodningsfunktion som gör detta åt oss, som så:

  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å detta bör ladda "sträng"-data i din tabell och alla fall där du har specialtecken, skulle det dyka upp som '½' eller något i den meningen.

Sedan på C#-sidan kan du göra något med html-avkodning:

using System.Web;

HttpUtility.HtmlDecode(mystring);

Återigen... oprövad. Men det borde vara väldigt enkelt att implementera och testa och/eller justera det något för att få det att fungera.

En alternativ lösning skulle också vara att helt enkelt utföra en datafix på din databas för att ändra alla dessa specialtecken till "vanliga" representationer (dvs. ett em-streck till ett normalt bindestreck). Du kan göra det med några reguljära uttryck, med funktionen CHR() och för att visa udda data med funktionen DUMP().




  1. Vilket läge för MySQL WEEK() uppfyller ISO 8601

  2. Hur kan jag replikera SHOW TABLES i Hibernate?

  3. Spara tabelldata som erhållits när du skrapar en webbsida med casperjs

  4. PostgreSQL dynamisk tabellåtkomst