sql >> Database >  >> RDS >> Oracle

c# lees SQL-tabel (met speciale tekens) in DataSet

Hier is een mogelijke oplossing, maar deze is niet getest, dus houd daar rekening mee!

Enige tijd geleden kwam ik een soortgelijk probleem tegen met speciale tekens in Oracle. We hebben ons teken ingesteld op UTF-16. Had rare dingen zoals umlauts en andere ascii-personages buiten het normale bereik van 32-127.

Een ding dat je zou kunnen proberen is eerst een HTML-codering uit te voeren naar iets buiten dat bereik, dat in je datatabel in c# te laden, en als de datatabel aan het vullen is (of nadat deze is gevuld...), voer een html-decodering uit op die velden.

We hebben een html-coderingsfunctie die dit voor ons doet, zoals:

  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;

Dit zou dus "string"-gegevens in uw tabel moeten laden en in elk geval waarin u speciale tekens hebt, zou het verschijnen als '½' of iets in die zin.

Dan zou je aan de C#-kant iets kunnen doen met html-decodering:

using System.Web;

HttpUtility.HtmlDecode(mystring);

Nogmaals... niet getest. Maar het zou heel gemakkelijk moeten zijn om het te implementeren en uit te testen en/of het enigszins aan te passen om het werkend te krijgen.

Een alternatieve oplossing zou ook zijn om gewoon een datafix op uw database uit te voeren om al die speciale tekens te veranderen in "gewone" representaties (dwz een em-streepje in een normaal streepje). U kunt dat doen met een aantal reguliere expressies, met behulp van de CHR()-functie, en om oneven gegevens te bekijken met de DUMP()-functie.




  1. Hoe SUBDATE() werkt in MariaDB

  2. Moeten PDO-tokens overeenkomen met de bindValue 1:1?

  3. Hoe kan ik resultaten krijgen van een JPA-entiteit die op afstand is geordend?

  4. De Moodle-database uitschalen