我有一个连接到dbf文件的c#程序:
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获取其他类型的数据(例如日期,数字等(时,一切正常。问题仅出在瓦尔查尔数据上。我该如何解决我的问题?
感谢任何帮助
根据安东尼奥·巴库拉的帮助,我已经阅读了答案:
我必须从 ODBC 更改为 OLE,并且:- 将连接字符串更改为:奥康恩。ConnectionString = "Provider=vfpoledb.1;Data Source="+pelna_sciezka+";整理序列=机器";为此更改代码:
OleDbDataReader odr = ocmd.执行读取器((;
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:
private string OdczytajTabliceBajtow(object p( { 编码 enc8 = 编码.ASCII; 字符串 wynik = "; 字节[] 字节 = (字节[](p; StringBuilder sb = new StringBuilder((; 某人。Append(Encoding.ASCII.GetChars(bytes((; 威尼克 = SB。ToString((; 返回怀尼克; }
这是我问题的解决方案。谢谢大家的帮助。
我建议您使用 FoxPro 的 OleDB 驱动程序,您不会遇到这些问题,并且速度会有显着提高,这里是链接
http://www.microsoft.com/en-us/download/details.aspx?id=14839
然后,您将从DataReader获得字符字段的字符串值