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

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

How to read/write dBase III files using C#/.NET ODBC or OLE?

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

谢谢你的时间。


就像是 ... ?

1
2
3
4
 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


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

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

1
2
3
4
5
6
7
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; }
}

您可以这样定义上下文:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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>(); }
    }
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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文件的源):

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

最后,您可以简单地执行与DBF文件之间的读写操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 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);
}


FoxPro 2.0文件与dBase III文件完全相同,但对于任何类型为" memo"的字段(都不确定确切的名称,已经有一段时间了),都需要多加一点。这意味着,如果仅使用FoxPro 2.x方法访问文件,则该方法应该有效。


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

使用者:74195 [vfp] [oledb]

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

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

了解有关参数查询的信息。使用VFP OleDb,参数使用"?"完成。字符作为占位符,因此需要按照与查询中出现的顺序完全相同的顺序添加参数。"?"可以显示为字段值,连接条件,条件等。

以下是一些让您开始使用HOPEFULLY的提示,可以让您开始使用有效的连接,进行查询,然后使用参数进行插入/更新/删除。

  • 示例显示连接字符串和来自表的简单查询

  • 显示参数化的sql-insert,但是在这种情况下,从另一个数据源(例如sql-server)获取数据,并从中创建VFP / dbf样式表。它遍历记录,为每个参数提取值并插入。

  • 另一个显示参数化的SQL更新

  • 祝您好运,还有很多其他人对VFP和OleDb Access进行回答,这些只是我专门参与的部分,并展示了可能有些您可能会错过的功能实现。


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

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


    推荐阅读