从dbf到c#程序的字符串数据

时间:2012-05-08 08:30:24

标签: c# sql foxpro dbf

我有一个c#程序,它连接到dbf文件:

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"];
}

连接工作得非常好,但是当我想将数据汇编到本地字符串变量(kod_kontr,nzwakontr1)时,我获得的值是System.Byte[]。当我想从这个dbf获取其他类型的数据(f.ex.date,numeric等)时,一切都运行良好。问题仅适用于varchar数据。我怎么能解决我的问题?

Thanx任何帮助


根据Antonio Bakula的帮助,我已经阅读了答案:

我必须从ODBC更改为OLE,并且: - 将connectionstring更改为: oconn.ConnectionString =“Provider = vfpoledb.1; Data Source =”+ pelna_sciezka +“;整理序列=机器”; 改变代码:

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"]);
            }

OdczytajTabliceBajtow:

私有字符串OdczytajTabliceBajtow(对象p)         {             编码enc8 = Encoding.ASCII;             string wynik =“”;             字节[]字节=(字节[])p;             StringBuilder sb = new StringBuilder();             sb.Append(Encoding.ASCII.GetChars(字节));             wynik = sb.ToString();             回归wynik;         }

这是我的问题的解决方案。谢谢大家的帮助。

1 个答案:

答案 0 :(得分:2)

我建议你为FoxPro使用OleDB驱动程序,你不会遇到这些问题,速度会有明显的提升,这里是链接

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

然后,您将从DataReader获取值作为字符字段的字符串