Привет!
Есть файл DBase III, в котором одна из колонок содержит слова на русском языке. Для считывания этого файла использую Microsoft Jet OLEDB 4.0
При считывании слов на русском языке, строки переводятся в Unicode и содержат произвольные символы (не соответствующие русским кодам в unicode)
Как можно получить оригинальные байты, которые записаны в колонке таблицы.
10.03.03 15:45: Перенесено модератором из '.NET' — ХД
Попробуй так:
Если установлен BDE, то в его настройках (configurations/drivers/native/dbase) надо выставить соответствующее значение LANGDRIVER (скорее всего cp866).
Если BDE не установлен, то IMHO лучше пользоваться не jet, а фоксовым ODBC драйвером — DRIVER={Microsoft Visual FoxPro Driver} (для .net надо качнуть с ms и установить native ODBC provider).
При этом в dbf файле надо прописать в 30-й байт зачение 0x65 если данные в OEM кодировке или 0xС9 если в ANSI.
Привет!
Есть файл DBase III, в котором одна из колонок содержит слова на русском языке. Для считывания этого файла использую Microsoft Jet OLEDB 4.0
При считывании слов на русском языке, строки переводятся в Unicode и содержат произвольные символы (не соответствующие русским кодам в unicode)
Как можно получить оригинальные байты, которые записаны в колонке таблицы.
Здравствуйте, appleru
Спасибо за совет. Я попытался написать код, который читает массив байтов из колонки DBase файла, однако во время вызова dr.GetChars( 5, 0, buffer, 0, 100 ); генерируется исключение Specified cast is invalid. В чем может быть проблема? Как вы думаете, удастся ли таким способом обойти без ручной модификации DBF файла?
OleDbConnection connD = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fddir + ";Extended Properties=dBase III;");
connD.Open();
OleDbCommand cmd = new OleDbCommand("SELECT * FROM " + fd, connD);
System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader( CommandBehavior.SequentialAccess );
while( dr.Read() )
{
char[] buffer = new char[100];
dr.GetChars( 5, 0, buffer, 0, 100 );
}
Здравствуйте, Stov, Вы писали: S>Спасибо за совет. Я попытался написать код, который читает массив байтов из колонки DBase файла, однако во время вызова dr.GetChars( 5, 0, buffer, 0, 100 ); генерируется исключение Specified cast is invalid. В чем может быть проблема? Как вы думаете, удастся ли таким способом обойти без ручной модификации DBF файла?
посмотри внимательно (в отладчике), в колонке 5 тип не char[] а, скорее всего, byte[].
методы reader'a типа GetChars, GetBytes работают без преобразования, поэтому метод должен строго соответствовать типу данных в колонке.
Здравствуйте, SCS, Вы писали:
SCS>посмотри внимательно (в отладчике), в колонке 5 тип не char[] а, скорее всего, byte[]. SCS>методы reader'a типа GetChars, GetBytes работают без преобразования, поэтому метод должен строго соответствовать типу данных в колонке. SCS>а дальше пробуй Encoding.
прошу прощения за опечатку — код в предыдущем постинге exception не генерирует. Exception возникает на следующем коде