Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中从DBF(Visual FoxPro)文件中读取特定列#_C#_.net Core_Dbf - Fatal编程技术网

C# 在C中从DBF(Visual FoxPro)文件中读取特定列#

C# 在C中从DBF(Visual FoxPro)文件中读取特定列#,c#,.net-core,dbf,C#,.net Core,Dbf,我一直在使用C#应用程序读取DBF文件。到目前为止,我可以成功地读取列名、列索引和遍历记录。在不使用列索引的情况下,似乎没有一种读取特定列数据的方法。例如,我可以使用如下语句获取FIRSTNAME值: using DbfDataReader; var dbfPath = "/CONTACTS.DBF"; using (var dbfTable = new DbfTable(dbfPath, EncodingProvider.UTF8)) { var dbfRecord = ne

我一直在使用C#应用程序读取DBF文件。到目前为止,我可以成功地读取列名、列索引和遍历记录。在不使用列索引的情况下,似乎没有一种读取特定列数据的方法。例如,我可以使用如下语句获取FIRSTNAME值:

using DbfDataReader;    
var dbfPath = "/CONTACTS.DBF";
using (var dbfTable = new DbfTable(dbfPath, EncodingProvider.UTF8))
{
     var dbfRecord = new DbfRecord(dbfTable);
     while (dbfTable.Read(dbfRecord))
     {
          Console.WriteLine(dbfRecord.Values[1].ToString()); // would prefer to use something like dbfRecord.Values["FIRSTNAME"].ToString()
          Console.WriteLine(dbfRecord.Values[2].ToString()); // would prefer to use something like dbfRecord.Values["LASTNAME"].ToString()
     }
  }
其中,1是FIRSTNAME列的索引,2是LASTNAME列的索引。对于本质上是名称/值对的内容,是否可以使用“FIRSTNAME”(或列名)作为键(或访问器)?我的目标是获得我关心的所有列,而不必每次都首先构建此地图。(如果我使用的术语不完全正确,请原谅)


非常感谢您查看此…

使用DbfDataReader类,如下所示:

var dbfPath = "/CONTACTS.DBF";
var options = new DbfDataReaderOptions
{
    SkipDeletedRecords = true,
    Encoding = EncodingProvider.UTF8
};

using (var dbfDataReader = new DbfDataReader.DbfDataReader(dbfPath, options))
{
    while (dbfDataReader.Read())
    {
        Console.WriteLine(dbfDataReader["FIRSTNAME"])
        Console.WriteLine(dbfDataReader["LASTNAME"])
    }
}

使用DbfDataReader类,如下所示:

var dbfPath = "/CONTACTS.DBF";
var options = new DbfDataReaderOptions
{
    SkipDeletedRecords = true,
    Encoding = EncodingProvider.UTF8
};

using (var dbfDataReader = new DbfDataReader.DbfDataReader(dbfPath, options))
{
    while (dbfDataReader.Read())
    {
        Console.WriteLine(dbfDataReader["FIRSTNAME"])
        Console.WriteLine(dbfDataReader["LASTNAME"])
    }
}

您可以使用实现reader[name]模式的DbfDataReader类您可以使用实现reader[name]模式的DbfDataReader类非常感谢@ChrisR。这非常简单。唯一的问题是我遇到了以下错误:“DbfDataReader”是一个名称空间,但它的使用方式与类型类似——我有一个正确的using语句,我相信:using DbfDataReader;。我还使用了(var dbfDataReader=newdbfdatareader(dbfPath,options));这太棒了。非常感谢!我很感激。还有一个问题。使用dbfRecord,我可以检查IsDeleted,查看记录是否被删除。dbfDataReader也可以吗?找到了
dbfDataReader.DbfRecord.isDeleted
@ChrisR:非常感谢这么好的库以及您对我的帮助请求的响应!!在尝试访问某个列之前,是否有方法检查该列是否存在?例如,如果“HappinessScore”不是表中的一列,dbfDataReader[“HappinessScore”]将返回并引发“System.ArgumentOutOfRangeException”类型的异常。。。但是我不知道如何检查它…你可以在选项中指定是否跳过已删除的记录,我已经更新了上面的答案。非常感谢@ChrisR。这非常简单。唯一的问题是我遇到了以下错误:“DbfDataReader”是一个名称空间,但它的使用方式与类型类似——我有一个正确的using语句,我相信:using DbfDataReader;。我还使用了(var dbfDataReader=newdbfdatareader(dbfPath,options));这太棒了。非常感谢!我很感激。还有一个问题。使用dbfRecord,我可以检查IsDeleted,查看记录是否被删除。dbfDataReader也可以吗?找到了
dbfDataReader.DbfRecord.isDeleted
@ChrisR:非常感谢这么好的库以及您对我的帮助请求的响应!!在尝试访问某个列之前,是否有方法检查该列是否存在?例如,如果“HappinessScore”不是表中的一列,dbfDataReader[“HappinessScore”]将返回并引发“System.ArgumentOutOfRangeException”类型的异常。。。但是我不知道如何检查它……你可以在选项中指定是否跳过已删除的记录,我已经更新了上面的答案。