BKl
BKl

Reputation: 415

string data from dbf to c# program

I've got a c# program, which is connected to dbf file:

OdbcConnection oconn = new OdbcConnection();
oconn.ConnectionString =
    "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + pelna_sciezka + ";Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
oconn.Open();
OdbcCommand ocmd = oconn.CreateCommand();

ocmd.CommandText = @"SELECT * FROM " + pelna_sciezka + " where Kod_kontr = '" + row.KNH_KOD + "'";
// ocmd.ExecuteNonQuery();
OdbcDataReader odr = ocmd.ExecuteReader();
while (odr.Read())
{
    kod_kontr = odr["Kod_kontr"].ToString();
    Nzwakontr1 = odr["Nzwakontr1"];
    Nzwakontr2 = odr["Nzwakontr2"];
}

connection is working very well, but when I want to assemble data to local string variables (kod_kontr, nzwakontr1), all i get for a value is System.Byte[]. When I want to get the other types of data (f.ex. date, numeric, etc)from this dbf, everything is working well. The problem is only for varchar data . How could I solve my problem?

Thanx for any help


According to Antonio Bakula help i've read the answer:

I must change from ODBC to OLE, and: - change connectionstring to: oconn.ConnectionString = "Provider=vfpoledb.1;Data Source="+pelna_sciezka+";Collating Sequence=machine"; change code for that:

OleDbDataReader odr = ocmd.ExecuteReader();

            while (odr.Read())
            {
              //  byte[] A = Encoding.GetEncoding(Encoding.Default.CodePage).GetBytes(odr.GetString(0));
              //  string p = Encoding.Unicode.GetString((Encoding.Convert(Encoding.GetEncoding(850), Encoding.Unicode, A)));

                kod_kontr = OdczytajTabliceBajtow(odr["Kod_kontr"]);
                Nzwakontr1 = OdczytajTabliceBajtow(odr["Nzwakontr1"]);
                Nzwakontr2 = OdczytajTabliceBajtow(odr["Nzwakontr2"]);
            }

where OdczytajTabliceBajtow:

private string OdczytajTabliceBajtow(object p) { Encoding enc8 = Encoding.ASCII; string wynik = ""; Byte[] bytes = (Byte[])p; StringBuilder sb = new StringBuilder(); sb.Append(Encoding.ASCII.GetChars(bytes)); wynik = sb.ToString(); return wynik; }

This is the solution of my problem. Thank you all for help.

Upvotes: 0

Views: 1375

Answers (1)

Antonio Bakula
Antonio Bakula

Reputation: 20693

I reccomend that you use OleDB driver for FoxPro and you will not have these problems, and there will be noticable gain in speed, here is the link

http://www.microsoft.com/en-us/download/details.aspx?id=14839

And then you will get value from DataReader as string for Character fields

Upvotes: 3

Related Questions