Oracle
 sql >> Baza danych >  >> RDS >> Oracle

c# wczytaj tabelę SQL (ze znakami specjalnymi) do DataSet

Oto możliwe rozwiązanie, ale nie zostało przetestowane, więc miej to na uwadze!

Na podobny problem natknąłem się jakiś czas temu ze znakami specjalnymi w Oracle. Mamy nasz znak ustawiony na UTF-16. Miał dziwne rzeczy, takie jak umlauty i inne znaki ascii poza normalnym zakresem 32-127.

Jedną z rzeczy, które możesz spróbować, jest najpierw wykonanie kodowania HTML do wszystkiego poza tym zakresem, załadowanie tego do tabeli danych w c#, a następnie, gdy tabela danych jest wypełniana (lub po jej wypełnieniu ...), wykonaj dekodowanie html na tych polach.

Mamy funkcję kodowania html, która robi to za nas, na przykład:

  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;

Powinno to załadować dane „ciągowe” do Twojej tabeli, a w każdym przypadku, gdy masz znaki specjalne, pojawią się one w stylu „½” lub coś w tym rodzaju.

Następnie po stronie C# możesz zrobić coś z dekodowaniem html:

using System.Web;

HttpUtility.HtmlDecode(mystring);

Znowu... niesprawdzony. Ale powinno być bardzo łatwe do wdrożenia i przetestowania i/lub nieznacznego dostrojenia, aby działało.

Alternatywnym rozwiązaniem byłoby również po prostu wykonanie poprawki danych w bazie danych, aby zmienić wszystkie te znaki specjalne na „zwykłe” reprezentacje (tj. myślnik na normalny myślnik). Możesz to zrobić za pomocą niektórych wyrażeń regularnych, używając funkcji CHR(), a także przeglądać nieparzyste dane za pomocą funkcji DUMP().




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja autoinkrementacji Oracle:wyzwalacze czy Oracle JDBC CallableStatement w wersji 11.2?

  2. Mapowanie MyBatis do pobierania listy niestandardowych typów rekordów w Oracle

  3. ropucha dla listy rozwijanej autouzupełniania Oracle

  4. Zwracanie wyniku nawet dla elementów z listy IN, które nie istnieją w tabeli

  5. Jak wstawić wiele wierszy do tej samej tabeli — Oracle 10g