【问题标题】:string data from dbf to c# program从 dbf 到 c# 程序的字符串数据
【发布时间】:2012-05-08 08:30:23
【问题描述】:

我有一个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 获取其他类型的数据(例如日期、数字等)时,一切正常。问题仅适用于 varchar 数据。我该如何解决我的问题?

感谢任何帮助


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

我必须从 ODBC 更改为 OLE,并且: - 将连接字符串更改为: oconn.ConnectionString = "Provider=vfpoledb.1;Data Source="+pelna_sciezka+";整理序列=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(); 返回威尼克; }

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

【问题讨论】:

  • 这些列的数据类型是什么,也许您应该调用GetString msdn.microsoft.com/en-us/library/… 而不是检索本机格式。
  • 此列具有 varchar 类型(dbf 结构中的 C(100) )。其他类型转换得很好,只有 'C' 类型有问题
  • 正如文档所述,索引访问器“以其本机格式获取指定列的值”,恰好某些列的本机格式与您所需的类型兼容。似乎索引访问器将 VFP 文本数据作为字节数组返回,并非完全不合理。如果您知道文本的编码,则可以使用 System.Text 命名空间将其转换为 .Net 字符串。如果你不这样做,你可以打电话给GetString,让 ODBC 层为你做转换。

标签: c# sql foxpro dbf


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多