我有 ac# 程序,它连接到 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 获取其他类型的数据(例如日期、数字等)时,一切正常。问题仅适用于 varchar 数据。我该如何解决我的问题?
感谢任何帮助
根据 Antonio Bakula 的帮助,我已经阅读了答案:
我必须从 ODBC 更改为 OLE,并且: - 将连接字符串更改为:oconn.ConnectionString = "Provider=vfpoledb.1;Data Source="+pelna_sciezka+";Collating Sequence=machine"; 为此更改代码:
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(object p) { 编码 enc8 = Encoding.ASCII; 字符串 wynik = ""; 字节[] 字节 = (字节[])p; StringBuilder sb = new StringBuilder(); sb.Append(Encoding.ASCII.GetChars(bytes)); wynik = sb.ToString(); 返回威尼克;}
这是我的问题的解决方案。谢谢大家的帮助。