如何使用C#/.NET ODBC或OLE读写dBaseIII文件?

2nc8po8w  于 2023-01-18  发布在  .NET
关注(0)|答案(5)|浏览(117)

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

rjee0c15

rjee0c151#

像是...

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

dly7yett

dly7yett2#

我知道这是一个老线索,但如果有人通过谷歌这里(像我几天前)..正如我在这里写的,优雅的解决方案是使用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);
}
piwo6bdm

piwo6bdm3#

FoxPro 2.0文件和dBase III文件完全一样,只是对于“memo”类型的字段多了一位(不确定确切的名称,已经有一段时间了)。这意味着如果你只是使用FoxPro 2.x method来访问文件,它应该可以工作。

nlejzf6q

nlejzf6q5#

我已经提供了许多关于使用数据库文件的答案(更具体地说是VFP,但Microsoft VFP OleDb提供程序将识别旧的dbase文件。您可以通过以下方式搜索以找到更多这些链接:
用户:74195[虚拟文件平台][oledb]
首先,我将从下载Microsoft VFP OleDb Provider开始。
接下来,如果您已经有一些dbf文件要连接以进行测试,则需要建立连接。连接必须指向文件所在的PATH,而不是特定的.dbf文件。因此,如果您有一个包含20个表的文件夹,则一旦连接到PATH,就可以通过标准VFP-SQL语法查询任何/所有表(与许多sql的整体结构相同,但基于一些函数如字符串,日期和数字操作而不同)。
了解如何将查询参数化。在VFP OleDb中,参数是用“?”字符作为占位符来完成的,因此参数需要按照它们在查询中出现的完全相同的顺序来添加。“?”可以作为字段值、连接条件、where条件等出现。
下面是一些帮助您开始的方法,希望您可以使用有效的连接、查询,然后使用参数插入/更新/删除。
1.显示连接字符串和来自表的简单查询的示例
1.显示一个参数化的sql-insert,但在本例中从另一个数据源(如sql-server)获取数据,并从中创建一个VFP/dbf样式的表。它通过循环记录、提取每个参数的值并插入来完成。
1.另一个显示参数化SQL-update
祝你好运,还有很多人回答了VFP和OleDb Access,这些只是我专门参与的一些,并展示了一些功能实现,否则你可能会错过一些东西。

相关问题