Aqui está uma solução possível, mas não foi testada, então tenha isso em mente!
Me deparei com um problema semelhante há algum tempo com caracteres especiais no Oracle. Temos nosso conjunto de caracteres para UTF-16. Tinha coisas estranhas como tremas e outros caracteres ASCII fora do intervalo normal de 32-127.
Uma coisa que você pode tentar é primeiro fazer uma codificação HTML para qualquer coisa fora desse intervalo, carregando isso em sua tabela de dados em c# e, à medida que a tabela de dados estiver sendo preenchida (ou depois de preenchida ...), execute uma decodificação html nesses campos.
Temos uma função de codificação html que faz isso para nós, assim:
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;
Portanto, isso deve carregar dados de "string" em sua tabela e, em qualquer caso em que você tenha caracteres especiais, apareceria como '½' ou algo nesse sentido.
Então, no lado C #, você pode fazer algo com decodificação html:
using System.Web;
HttpUtility.HtmlDecode(mystring);
Novamente... não testado. Mas deve ser muito fácil de implementar e testar e/ou ajustá-lo um pouco para que funcione.
Uma solução alternativa também seria simplesmente executar uma correção de dados em seu banco de dados para alterar todos esses caracteres especiais para representações "regulares" (ou seja, um travessão para um travessão normal). Você pode fazer isso com algumas expressões regulares, usando a função CHR(), e para visualizar dados ímpares usando a função DUMP().