Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / перекодировать dataset c# / 4 сообщений из 4, страница 1 из 1
21.04.2014, 13:31
    #38620361
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировать dataset c#
В общем, получаю данные из бд фокса, необходимо отобразить в нормальной кодировке. кодировка в базе дос (866). как бы сделать перекодировку еще до заливания в датагрид?


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
          conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\;Extended Properties=dBASE IV;User ID=;Password=;";
                conn.Open();
                OleDbCommand comm = conn.CreateCommand();
              string ttime = "13/03/2014 00:00:00";
            comm.CommandText = @"SELECT  PRODUKT, NOMER, FEMGN, FEOBS, DATA, TIME FROM ANALIZ  WHERE [DATA] > #" +max + "# or ([DATA] = #" + max + "# and [TIME] > #" + maxtime + "#)";
                dt.Load(comm.ExecuteReader());
                label2.Text ="row: "+ dt.Rows.Count.ToString() + " column: " + dt.Columns.Count.ToString();
                dataGridView1.DataSource = dt;
...
Рейтинг: 0 / 0
21.04.2014, 13:37
    #38620371
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировать dataset c#
Надо указать в заголовке кодовую страницу 866. Для этого установить 29й байт в 101
На фоксе так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
func SetCP866
lpara tcFile
local lnH, llOk
lnH = FOPEN(tcFile, 2)
if lnH > 0
	FSEEK(lnH, 29)
	FWRITE(lnH, CHR(101))
	FCLOSE(lnH)
	llOk = .T.
endif
return llOk


на С# сам перепиши.
...
Рейтинг: 0 / 0
21.04.2014, 14:13
    #38620429
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировать dataset c#
на сях
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    public void ConvertMe() {         
                for (int tt = 0; tt < this.dataGridView1.RowCount - 1; tt++)
                {
                    string o = dt.Rows[tt][1].ToString();
                    var fromEncodind = Encoding.GetEncoding(1252);//из какой кодировки
                    var bytes = fromEncodind.GetBytes(o);
                    var toEncoding = Encoding.GetEncoding(1251);//в какую кодировку
                    string nom = toEncoding.GetString(bytes);
                    dt.Rows[tt][1]= nom; 
                }
...
Рейтинг: 0 / 0
21.04.2014, 14:27
    #38620449
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировать dataset c#
В заголовке dbf должна быть указана кодовая страница (в 29-м байте)
Если указана 866 (значение 101) - конвертация в 1251 должна пройти автоматом.
Если не указана ( стоит 0) то конвертировать после чтения, что ты и делаешь. Не указана она обычно у старых досовских прог, FPD например. Если ты этот байт установишь - для той проги проблем никаких не будет, она этот байт просто игнорирует.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / перекодировать dataset c# / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]