我有一個C#程序,連接到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中獲得其他類型的數據(f.ex. date,numeric等)時,一切正常。該問題僅適用於varchar數據。我怎麼能解決我的問題?
感謝名單的任何幫助
據安東尼巴庫拉的幫助,我讀過了答案:
我必須從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 =「」; Byte [] bytes =(Byte [])p; StringBuilder sb = new StringBuilder(); sb.Append(Encoding.ASCII.GetChars(bytes)); wynik = sb.ToString(); return wynik; }
這是我的問題的解決方案。謝謝大家的幫助。
這些列的數據類型是什麼,可能應該調用'GetString' http://msdn.microsoft.com/zh-cn/library/system.data.odbc.odbcdatareader.getstring .aspx而不是檢索本機格式。 – Jodrell
這個列有一個varchar類型(C(100)在dbf結構中)。其他類型轉換得非常好,只有'C'類型出現問題 – BKl
正如文檔所述,索引accesor「以其本機格式獲取指定列的值」,它恰好發生了某些這些列與您所需的類型兼容。看起來索引訪問器將VFP文本數據作爲字節數組返回,並非完全不合理。如果您知道文本的編碼,則可以使用'System.Text'命名空間將其轉換爲.Net字符串。如果你不這樣做,你可以調用'GetString'並讓ODBC層爲你做轉換。 – Jodrell