Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Как в запросе к dbf указать кодировку?

#c_sharp #dbf


Есть dbf файл, созданный Visual Fox Pro. Его я менять не могу, могу только читать. Читаю
 conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\;Extended
Properties=dBASE IV;User ID=;Password=;";
                    conn.Open();
                    OleDbCommand comm = conn.CreateCommand();
                    comm.CommandText = @"SELECT NOMER, FEMGN, FEOBS, DATA, TIME FROM
ANALIZ";
                    dt.Load(comm.ExecuteReader());
                    column = dt.Columns[0];
                    row = dt.Rows[0];
                    result = row[column].ToString();
                    dataGridView1.DataSource = dt

Но в файле кодировка dos. Необходимо привести к utf -8. Пытаюсь так - не получается
 var fromEncodind = Encoding.GetEncoding(866);//из какой кодировки
                var bytes = fromEncodind.GetBytes(o);
                var toEncoding = Encoding.UTF8;//в какую кодировку
              string  ans = toEncoding.GetString(bytes);

Видимо из базы уже получаю корявую строку. Подскажите как в запросе к dbf указать
кодировку    


Ответы

Ответ 1



DBF таблицы с кодировкой 866 грузится нормально, если загружать через OLE DB Provider for Visual FoxPro 9.0 private void LoadTable(string path, DataGridView dataGrid) { try { var connectionString = "Provider=VFPOLEDB.1;Data Source=" + path + ";Collating Sequence=MACHINE"; var con = new OleDbConnection(connectionString); con.Open(); var adapter = new OleDbDataAdapter("SELECT * FROM " + Path.GetFileNameWithoutExtension(path), con); con.Close(); var dataSet = new DataSet(); adapter.Fill(dataSet); dataGrid.DataSource = dataSet.Tables[0]; } catch (Exception err) { MessageBox.Show(err.Message + " " + path, "Ошибка открытия DBF таблицы", MessageBoxButtons.OK, MessageBoxIcon.Error); } }

Ответ 2



помимо Provider=VFPOLEDB.1 из ответа Мурада, в случае английской винды еще потребуется: var value = ds.Tables[0].Rows[0][1]; string encodedValue = Encoding.UTF8.GetString((Encoding.Convert(Encoding.GetEncoding(866), Encoding.UTF8, Encoding.Default.GetBytes(value.ToString()))));

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

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