Berikut adalah solusi yang mungkin, tetapi belum teruji, jadi ingatlah itu!
Saya menemukan masalah serupa beberapa waktu lalu dengan karakter khusus di Oracle. Kami mengatur karakter kami ke UTF-16. Memiliki hal-hal aneh seperti umlauts dan karakter ascii lainnya di luar kisaran normal 32-127.
Satu hal yang mungkin Anda coba adalah pertama-tama melakukan penyandian HTML untuk apa pun di luar rentang itu, memuatnya ke dalam datatable Anda di c#, kemudian ketika datatable sedang diisi (atau setelah diisi ...), lakukan decode html pada bidang tersebut.
Kami memiliki fungsi encode html yang melakukan ini untuk kami, seperti:
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;
Jadi ini akan memuat data "string" ke dalam tabel Anda dan setiap kasus di mana Anda memiliki karakter khusus, itu akan muncul seperti '½' atau semacamnya.
Kemudian di sisi C# Anda dapat melakukan sesuatu dengan dekode html:
using System.Web;
HttpUtility.HtmlDecode(mystring);
Sekali lagi... belum teruji. Tapi itu harus sangat mudah untuk diimplementasikan dan diuji dan/atau diubah sedikit untuk membuatnya bekerja.
Solusi alternatif juga adalah dengan hanya melakukan perbaikan data pada database Anda untuk mengubah semua karakter khusus tersebut menjadi representasi "biasa" (yaitu, tanda hubung em ke tanda hubung normal). Anda dapat melakukannya dengan beberapa ekspresi reguler, menggunakan fungsi CHR(), dan untuk melihat data ganjil menggunakan fungsi DUMP().