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

时间:2008-09-16 18:56:55

标签: c# .net dbf dbase

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

感谢您的时间。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

我意识到这是一个老线程,但万一有人通过谷歌来到这里(就像我几天前)..在我写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);
}

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我提供了很多关于使用数据库文件的答案(更具体地说是VFP,但Microsoft VFP OleDb提供程序将识别旧的dbase文件。您可以通过以下方式搜索以查找更多这些链接:

用户:74195 [VFP] [OLEDB]

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

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

了解PARAMETERIZING您的查询。使用VFP OleDb,参数通过&#34;?&#34;完成。字符作为占位符,因此参数需要以与查询中显示的完全相同的顺序添加。 &#34;?&#34;可以显示为字段值,连接条件,标准等等。

以下是让您开始HOBEFULLY的FEW,让您开始使用有效的连接,查询,然后使用参数插入/更新/删除。

  1. Sample showing a connection string and simple query from a table

  2. Shows a parameterized sql-insert但在这种情况下从另一个数据源获取数据,例如sql-server并从中创建VFP / dbf样式表。它通过循环记录并为每个参数提取值并插入。

  3. and another showing parameterized SQL-update

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