Ето едно възможно решение, но не е тествано, така че имайте го предвид!
Попаднах на подобен проблем преди време със специални знаци в Oracle. Имаме набор от символи UTF-16. Имаше странни неща като умлаути и други ASCII знаци извън нормалния диапазон 32-127.
Едно нещо, което можете да опитате, е първо да направите 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;
Така че това трябва да зареди "низови" данни във вашата таблица и всеки случай, когато имате специални символи, ще се покаже като '½' или нещо подобно.
След това от страна на C# можете да направите нещо с html decode:
using System.Web;
HttpUtility.HtmlDecode(mystring);
Отново...непроверено. Но трябва да е много лесно за внедряване и тестване и/или леко коригиране, за да работи.
Алтернативно решение също би било просто да извършите корекция на данни във вашата база данни, за да промените всички тези специални знаци в "обикновени" представяния (т.е. тире em в нормално тире). Можете да направите това с някои регулярни изрази, като използвате функцията CHR() и да видите нечетни данни с помощта на функцията DUMP().