У меня часто возникала эта проблема с получением данных из моей базы данных Sybase в Windows. Вы сохраняете данные как cp850 (что хорошо), sybase может вернуть их вам в любом наборе символов, который вы пожелаете, однако клиент должен сообщить серверу, какой набор символов ему нужен, и сервер преобразует его для Вы перед возвратом данных.
Однако по умолчанию соединения ado.net, oledb или odbc не определяют набор символов клиента. Sybase не будет применять никаких преобразований, и Windows (или ваше приложение) предполагает, что данные находятся в его предпочтительном наборе символов.
Исправление заключается в указании набора символов при подключении. Тот, который работал для меня, это "iso_1". (Вы также можете найти WIN1252 в качестве альтернативы, но я его не проверял)
Так что, если вы используете odbc или oledb, откройте диспетчер соединений, перейдите на вторую или третью страницу и поместите «iso_1» в поле набора символов. Вы также можете указать это в строке подключения, но я не могу вспомнить точный синтаксис, возможно "; charset = iso_1".
Если вы используете ado.net, я уверен, что вы можете сделать то же самое, но опять же, я не уверен в точном синтаксисе.