вторник, 16 ноября 2010 г.

Специальный выпуск. SyBase ASE 12 и .Net provider. Как победить кирилицу.

How to get char data from sybase with ado.net provider.
Давным давно от тяжёлой лени начал пользовать .Net Framework. С MS SQL все естественно зашибись, но пришлось столкнутся с SyBase ASE 12 и получением кирилических строк из БД. Но строка полученная с помощью стандартного ado.NET провайдера для ASE 12 упорно была в виде крякозяблов и стандартными преобразованиями никак в кирилицу не превращалась. Однако при преобразовании в массив byte или char в ней явно прослеживались символы из cp1251. В итоге пришлось родить вот такой вот код:

//преобразование 0 столбца таблички получаемой с помощью .NET из SyBase ASE в //удобочитаемою строку
using SyBase.Data.AseClient

Sybase.Data.AseClient.AseDataReader reader = aseCmd.ExecuteReader();                                      
                   
char[] buf=new char[255];

while (reader.Read())
 {
                 long l=reader.GetChars(0, 0, buf, 0, 255);
//тут самое интересное, почему бы не использовать GetBytes сразу, ну вот не работает, почему не //разобрался, проще конвертнуть char[]2byte[], кто посоветует способ лучше?
                MessageBox.Show(System.Text.Encoding.GetEncoding(1251).GetString(CharArray2ByteArray(buf, l)).Trim());




private static byte[] CharArray2ByteArray(char[] ch,long l)
        {
            byte[] byteArray = new byte[l];
            for (int i = 0; i < l; i++)
                byteArray[i] = Convert.ToByte(ch[i]);

            return byteArray;
} 

Комментариев нет:

Отправить комментарий