首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 操作 DBF (FoxPro) 資料庫:ODBC 連接與 CRUD 實作

     編輯:關於C語言

背景:舊系統資料遷移/整合常見需求

許多早期系統使用 Visual FoxPro (VFP) 建立 .dbf 檔案。C# 整合此類舊資料時,標準做法是透過 ODBC 驅動程式 連接,而非 OLE DB (VFP OLE DB 提供者已停止更新)。

必要條件

  1. 安裝 Microsoft Visual FoxPro ODBC Driver (包含於 VFP 安裝或單獨下載)
  2. 系統 DSN 或無 DSN 連接字串均可

連接字串關鍵參數

Driver={Microsoft Visual FoxPro Driver};
SourceType=DBF;
SourceDB=D:\Data\;          // 目錄路徑,非檔案路徑
Exclusive=No;               // 共享模式
NULL=NO;
Collate=Machine;
BACKGROUNDFETCH=NO;
DELETED=NO;                 // 不顯示已刪除記錄

關鍵點:SourceDB 指向 **資料夾**,SQL 查詢中表名直接用檔案名 (如 code.dbf)。

完整 CRUD 範例 (ASP.NET WebForms)

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();
        }
    }
}

常見坑與解決

  • 欄位名稱保留字:VFP 欄位名可能為保留字,SQL 中用方括號括起 [field]
  • 日期格式:VFP 日期常為 {^2023-10-15} 格式,參數化查詢自動處理
  • 中文編碼:DBF 多為 BIG5/GBK,讀取後可能需 Encoding.GetEncoding(936).GetString() 轉換
  • 並發鎖定:Exclusive=No 允許共享,但 VFP 鎖定機制較弱,高併發建議遷移至 SQL Server

替代方案

  • OLE DB Provider for VFP 9.0:微軟官方提供者,功能較完整但已停止維護
  • 第三方庫:DbfDataReader (純 .NET 讀取 .dbf,無需驅動程式)
  • ETL 工具:大量遷移建議用 SSIS、PowerShell 或 Python (dbfread) 匯入現代資料庫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved