Witam,
Wczytuje do DataTable tabele dbf i wszystko jest ok dopóki pola tekstowe w tej tabeli nie maja dlugości większej niż 255 znaków. Czy wiecie skąd ściągnąć sterownik i/lub jak skonfigurować, żeby poprawnie obslugiwał pola tekstowe o długości większej niż 255 znaków?
Zgodnie ze specyfikacją dbf-a w wersjach dbase długość pola tekstowego jest na jednym bajcie. Wyjątkiem są wersje clipper i foxpro tam długość jest na dwóch bajtach (jeden "zwykła" dlugość) i drugi miejsca dziesiętne liczby.
Próbowałem różne ConnectionString-i ale efekt jest zawsze taki sam - pierwsze pole tekstowe o długości większej niż 255 jest pocięte i kolejne pola są albo puste albo też pocięte.
Poniżej kod wczytujący dbf-a do DataTable
private DataTable ZaladujPlikDbf(String nazwa_pliku)
{
DataTable wynik = null;
OdbcConnection odbc_polaczenie = null;
OdbcCommand odbc_komenda = null;
try
{
Directory.SetCurrentDirectory(Path.GetDirectoryName(nazwa_pliku));
String zapytanie = "SELECT * FROM " + Path.GetFileName(nazwa_pliku);
// odbc_polaczenie = new OdbcConnection("Driver={Microsoft FoxPro VFP Driver (*.dbf)};" +
odbc_polaczenie = new OdbcConnection("Driver={Microsoft dBase Driver (*.dbf)};" +
"SourceType=DBF;SourceDB=" + Path.GetDirectoryName(nazwa_pliku) +
";Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;");
odbc_komenda = new OdbcCommand(zapytanie, odbc_polaczenie);
odbc_polaczenie.Open();
wynik = new DataTable();
wynik.BeginLoadData();
wynik.Load(odbc_komenda.ExecuteReader());
wynik.EndLoadData();
wynik.AcceptChanges();
odbc_polaczenie.Close();
}
catch (Exception blad)
{
MessageBox.Show("Blad: " + blad.Message);
};
return wynik;
}