sql >> データベース >  >> RDS >> Oracle

c#はSQLテーブル(特殊文字を含む)をDataSetに読み込みます

    考えられる解決策は次のとおりですが、テストされていないため、この点に注意してください。

    しばらく前に、Oracleの特殊文字で同様の問題に遭遇しました。文字セットはUTF-16です。通常の32〜127の範囲外のウムラウトやその他のASCII文字などの奇妙なものがありました。

    最初にその範囲外のHTMLエンコードを実行し、それをc#のデータテーブルにロードしてから、データテーブルがいっぱいになると(またはいっぱいになった後...)、それらのフィールドでhtmlデコードを実行します。

    次のように、これを行うhtmlエンコード関数があります。

      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;
    

    したがって、これにより「文字列」データがテーブルに読み込まれ、特殊文字がある場合は、「&#189」などのように表示されます。

    次に、C#側では、htmlデコードを使用して何かを行うことができます:

    using System.Web;
    
    HttpUtility.HtmlDecode(mystring);
    

    再び...テストされていません。ただし、実装とテストは非常に簡単で、機能させるために少し調整する必要があります。

    別の解決策は、データベースでデータ修正を実行して、これらすべての特殊文字を「通常の」表現(つまり、全角ダッシュから通常のダッシュ)に変更することです。これは、CHR()関数を使用していくつかの正規表現で実行し、DUMP()関数を使用して奇数データを表示することができます。




    1. java.net.SocketInputStream.socketRead0(ネイティブメソッド)でスレッドがハングしました。何が起こったのか誰もが知っていますか?

    2. レーキが中止されました!そのようなファイルをロードできません-エルキャピタンのmysql2/mysql2

    3. null以外の列をかなり奇妙な方法で数える

    4. CodeIgniterSelectステートメントとWhere句