就像是 ... ?
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()
Run Code Online (Sandbox Code Playgroud)
来自:http://bytes.com/forum/thread112085.html
我意识到这是一个旧线程,但万一有人通过谷歌来到这里(就像我几天前)..正如我在这里写的,优雅的解决方案是使用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; }
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样定义上下文:
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>(); }
}
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样定义上下文属性:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要一个连接字符串,您可以像这样在app.config中定义它(Data\在这种情况下,相对路径用作DBF文件的源):
<connectionStrings>
<add name="VfpData" providerName="System.Data.OleDb"
connectionString="Provider=VFPOLEDB.1;Data Source=Data\;"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
最后,您可以像以下一样简单地对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);
}
Run Code Online (Sandbox Code Playgroud)
FoxPro 2.0 文件与 dBase III 文件完全相同,但对于“备忘录”类型的任何字段都有一个额外的位(不确定确切的名称,已经有一段时间了)。这意味着如果您只使用FoxPro 2.x 方法来访问文件,它应该可以工作。
| 归档时间: |
|
| 查看次数: |
28990 次 |
| 最近记录: |