如何使用 C#/.NET ODBC 或 OLE 读取/写入 dBase III 文件?

问题描述 投票:0回答:5

我搜索了有关如何使用 OLEDB 或 ODBC 与 C#/.NET 读取/写入 dBase III (dbf) 文件的各种技术。我已经尝试了几乎所有发布的技术,但没有成功。有人能指出我正确的方向吗?

感谢您的宝贵时间。

c# .net dbf dbase
5个回答
8
投票

类似...?

 ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=e:\My Documents\dBase;Extended Properties=dBase III"
Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(ConnectionString )
dBaseConnection.Open()

来自:http://bytes.com/forum/thread112085.html


8
投票

我意识到这是一个旧线程,但万一有人通过谷歌到达这里(就像我几天前那样)..正如我在here所写的那样,优雅的解决方案是使用LINQ to VFP来读取和写入到 DBF 文件。我用一些 dBase III 文件对其进行了测试。事情是这样的:

您定义表以匹配 DBF 定义,如下所示:

public partial class MyTable 
{
    public System.Int32 ID { get; set; }
    public System.Decimal Field1 { get; set; }
    public System.String Field2 { get; set; }
    public System.String Field3 { get; set; }
}

您可以这样定义上下文:

public partial class Context : DbEntityContextBase 
{
    public Context(string connectionString)
        : this(connectionString, typeof(ContextAttributes).FullName) 
    {
    }

    public Context(string connectionString, string mappingId)
        : this(VfpQueryProvider.Create(connectionString, mappingId)) 
    {
    }

    public Context(VfpQueryProvider provider)
        : base(provider) 
    {
    }

    public virtual IEntityTable<MyTable> MyTables 
    {
        get { return this.GetTable<MyTable>(); }
    }
}

您可以这样定义上下文属性:

public partial class ContextAttributes : Context 
{
    public ContextAttributes(string connectionString)
        : base(connectionString) {
    }

    [Table(Name="mytable")]
    [Column(Member="ID", IsPrimaryKey=true)]
    [Column(Member="Field1")]
    [Column(Member="Field2")]
    [Column(Member="Field3")]
    public override IEntityTable<MyTable> MyTables 
    {
        get { return base.MyTables; }
    }
}

你还需要一个连接字符串,你可以像这样在app.config中定义它(

Data\
在这种情况下使用相对路径作为DBF文件的源):

<connectionStrings>
  <add name="VfpData" providerName="System.Data.OleDb"
    connectionString="Provider=VFPOLEDB.1;Data Source=Data\;"/>
</connectionStrings>

最后,您可以像下面这样简单地执行 DBF 文件的读写操作:

// Construct a new context
var context = new Context(ConfigurationManager.ConnectionStrings["VfpData"].ConnectionString);

// Write to MyTable.dbf
var my = new MyTable
{
    ID = 1,
    Field1 = 10,
    Field2 = "foo",
    Field3 = "bar"
}
context.MyTables.Insert(my);

// Read from MyTable.dbf
Console.WriteLine("Count:  " + context.MyTables.Count());
foreach (var o in context.MyTables)
{
    Console.WriteLine(o.Field2 + " " + o.Field3);
}

3
投票

FoxPro 2.0 文件与 dBase III 文件完全相同,但对于“备忘录”类型的任何字段都有一个额外的位(不确定确切的名称,已经有一段时间了)。这意味着如果您只使用 FoxPro 2.x 方法 来访问文件,它应该可以工作。


0
投票

这是一个很好的方法,我没有测试过,但我很快就会......

http://www.c-sharpcorner.com/uploadfile/rfederico/xbaseenginerfv12022005011623am/xbaseenginerfv.aspx


0
投票

我已经提供了许多有关使用数据库文件(更具体地说是 VFP,但 Microsoft VFP OleDb 提供程序将识别较旧的数据库文件)的答案。您可以通过以下方式进行搜索以查找更多此类链接:

用户:74195[vfp][oledb]

首先,我将从下载 Microsoft VFP OleDb Provider 开始。

接下来,如果您已经有一些尝试连接进行测试的 dbf 文件,则需要建立连接。连接必须指向文件所在的 PATH,而不是特定的 .dbf 文件。因此,如果您有一个包含 20 个表的文件夹,一旦连接到 PATH,您就可以通过标准 VFP-SQL 语法(与许多 sql 的整体结构相同,但根据某些功能而有所不同)从任何/所有表中查询如字符串、日期和数字操作)。

了解如何参数化您的查询。对于VFP OleDb,参数是通过“?”完成的。字符作为占位符,因此需要按照与查询中出现的完全相同的顺序添加参数。这 ”?”可以显示为字段值、连接条件、where 条件等。

以下内容可以帮助您开始使用有效的连接、查询,然后使用参数插入/更新/删除。

  1. 显示连接字符串和表中简单查询的示例

  2. 显示参数化的 sql-insert,但在本例中从另一个数据源(例如 sql-server)获取数据并从中创建 VFP/dbf 样式表。它会循环记录并提取每个参数的值并插入。

  3. 另一个显示参数化 SQL 更新

祝你好运,还有很多其他人回答了 VFP 和 OleDb Access,这些只是我专门参与过的一些内容,并展示了一些功能实现,其中可能有一些你可能会错过的东西。

© www.soinside.com 2019 - 2024. All rights reserved.