您可以使用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);
}
是的,但更新太慢。我有〜1GB的基地,我必須清除每行中包含它的一些字符。如果我一行一行地做,它會花費太多,因爲數據庫沒有索引。我必須做一些醜陋的事情,比如將所有內容全部移到內存中,刪除所有記錄並用更改的記錄進行替換。我嘗試更新替換命令,但似乎微軟JET不支持它。也許有些其他供應商呢?現在我成功更新從Access中取代,但我不確定訪問使用什麼? – watbywbarif 2010-07-08 21:54:41