許多早期系統使用 Visual FoxPro (VFP) 建立 .dbf 檔案。C# 整合此類舊資料時,標準做法是透過 ODBC 驅動程式 連接,而非 OLE DB (VFP OLE DB 提供者已停止更新)。
Driver={Microsoft Visual FoxPro Driver};
SourceType=DBF;
SourceDB=D:\Data\; // 目錄路徑,非檔案路徑
Exclusive=No; // 共享模式
NULL=NO;
Collate=Machine;
BACKGROUNDFETCH=NO;
DELETED=NO; // 不顯示已刪除記錄
關鍵點:SourceDB 指向 **資料夾**,SQL 查詢中表名直接用檔案名 (如 code.dbf)。
protected void Page_Load(object sender, EventArgs e)
{
string table = @"D:\aaa\code.dbf";
string connStr = $@"Driver={{Microsoft Visual FoxPro Driver}};SourceType=DBF;SourceDB={System.IO.Path.GetDirectoryName(table)};Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO";
using (var conn = new OdbcConnection(connStr))
using (var cmd = conn.CreateCommand())
{
conn.Open();
// UPDATE
cmd.CommandText = $"UPDATE {table} SET other='2', rate=1.014";
cmd.ExecuteNonQuery();
// SELECT 並繫結 GridView
cmd.CommandText = $"SELECT * FROM {table}";
using (var da = new OdbcDataAdapter(cmd))
{
var dt = new DataTable();
da.Fill(dt);
GridView1.DataSource = dt.DefaultView;
GridView1.DataBind();
}
}
}
[field]{^2023-10-15} 格式,參數化查詢自動處理Encoding.GetEncoding(936).GetString() 轉換Exclusive=No 允許共享,但 VFP 鎖定機制較弱,高併發建議遷移至 SQL ServerDbfDataReader (純 .NET 讀取 .dbf,無需驅動程式)