我已经搜索了有关如何使用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