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

SQL Server 與 DBF/VFP 資料互轉完整指南:OPENROWSET、DTS、驅動程式選擇

     編輯:關於SqlServer

前言

DBF (dBase/Visual FoxPro) 為傳統桌面資料庫格式,與 SQL Server 互轉是常見遷移需求。本文彙整多種方案:OPENROWSET、DTS/匯入導出精靈、驅動程式選擇,並解決常見錯誤。

核心驅動程式比較

驅動程式Provider 字串特點適用場景
VFP OLE DBVFPOLEDB.1支援 VFP 完整功能、字元型別對應佳VFP 6.0+ 表、需保留 Null/邏輯型別
Visual FoxPro ODBCMSDASQL + Driver=Microsoft Visual FoxPro Driver成熟穩定、廣泛相容通用 DBF/VFP 表
Jet OLE DBMicrosoft.Jet.OLEDB.4.0 + DBase III/IVWindows 內建、無需額外安裝簡單 DBF、無 VFP 環境

方案一:OPENROWSET 即時查詢/匯入/匯出

1. 查詢 DBF 資料


-- VFPOLEDB
SELECT * FROM OPENROWSET('VFPOLEDB.1', 'C:\Data\';'admin';'', 'SELECT * FROM Customer');

-- Visual FoxPro ODBC (推薦)
SELECT * FROM OPENROWSET('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\Data', 
    'SELECT * FROM Customer');

2. 匯入 DBF 到 SQL Server (目標表已存在)


INSERT INTO SQL_Target_Table (Col1, Col2)
SELECT Col1, Col2 
FROM OPENROWSET('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\Data', 
    'SELECT Col1, Col2 FROM Source.DBF');

3. 匯入 DBF 建立新表


-- 方式 1:VFPOLEDB (需安裝 VFPOLEDB.msi)
SELECT * INTO SQL_New_Table 
FROM OPENROWSET('VFPOLEDB.1', 'C:\Data\';'admin';'', 'SELECT * FROM Source.DBF');

-- 方式 2:Visual FoxPro ODBC (推薦,無需額外安裝)
SELECT * INTO SQL_New_Table 
FROM OPENROWSET('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\Data', 
    'SELECT * FROM Source.DBF');

-- 方式 3:Jet OLE DB (DBase IV)
SELECT * INTO SQL_New_Table 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'DBase IV;HDR=NO;IMEX=2;DATABASE=C:\Data', 
    'SELECT * FROM Source.dbf');

4. 匯出 SQL Server 到 DBF (目標 DBF 已存在)


INSERT INTO OPENROWSET('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\Data', 
    'SELECT * FROM Target.DBF')
SELECT Col1, Col2 FROM SQL_Source_Table;

常見錯誤與解決

錯誤 1:INSERT INTO OPENROWSET('VFPOLEDB.1'...) 失敗

「無法從 OLE DB 提供程式 'VFPOLEDB.1' 取得必要介面」

原因:VFPOLEDB 不支援直接 INSERT 寫入。

解決:改用 MSDASQL + Visual FoxPro ODBC 驅動。

錯誤 2:Jet OLE DB 「無法處理物件...沒有任何欄位」

「OLE DB 提供程式 'Microsoft.Jet.OLEDB.4.0' 指出該物件中沒有任何欄位」

原因:Jet 的 DBase 驅動對 VFP 表格式支援有限。

解決:優先使用 Visual FoxPro ODBC 驅動。

錯誤 3:匯入後 DBF 被鎖定無法開啟

現象:VFPOLEDB/ODBC 匯入後,VFP 開啟來源 DBF 提示「無法存取檔案」,約 1 分鐘後自動釋放。

原因:連接集區未立即釋放檔案鎖定。

解決:查詢結束後執行 DBCC FREEPROCCACHE 或等待連接逾時;生產環境建議先複製 DBF 檔案再操作。

方案二:DTS / 匯入導出精靈 (圖形化、支援對應、轉換)

建立 ODBC 系統 DSN

  1. 控制台 → 系統管理工具 → ODBC 資料來源 (64位/32位對應 SQL Server 版本)
  2. 系統 DSN → 新增 → Microsoft Visual FoxPro Driver
  3. 資料來源名稱:自訂 (如 VFP_Data)
  4. 資料庫類型:Free Table Directory
  5. 路徑:DBF 檔案所在資料夾 (如 D:\Data)

匯入 DBF → SQL Server

  1. SSMS → 資料庫右鍵 → 工作 → 匯入資料
  2. 資料來源:Microsoft Visual FoxPro Driver → 選擇 DSN VFP_Data
  3. 目的地:SQL Server Native Client → 目標伺服器/資料庫
  4. 選擇「從來源資料庫複製資料表」或「撰寫查詢指定資料」
  5. 對應欄位、類型轉換 → 完成

匯出 SQL Server → DBF

  1. 匯出資料精靈
  2. 資料來源:SQL Server
  3. 目的地:Microsoft Visual FoxPro Driver → 同一 DSN
  4. 選擇資料表/查詢 → 對應 → 完成
  5. 注意:匯出的 DBF 檔案通常在 C:\Program Files\Microsoft SQL Server\...\Binn 或 Common Files\ODBC\Data Sources,非指定路徑

方案三:中繼格式轉換 (Excel/CSV/TXT)

VFP → COPY TO Excel/CSV → SQL Server 匯入。適用於一次性遷移、格式複雜、驅動程式問題難解時的備案。

最佳實務建議

  1. 優先使用 Visual FoxPro ODBC (MSDASQL):相容性最好、無需額外安裝、支援讀寫
  2. 預先複製 DBF 檔案:避免鎖定原始檔案、防止意外損壞
  3. 欄位類型對應驗證:VFP 邏輯/貨幣/雙精度 → SQL Server bit/money/decimal
  4. 編碼處理:舊版 DBF 可能為 Big5/GB2312,匯入前確認編碼或指定 CodePage
  5. 大量資料用 BCP/SSIS:OPENROWSET 適合中小量即時互操作

結語

SQL Server 與 DBF 互轉的關鍵在於選對驅動程式。Visual FoxPro ODBC (MSDASQL) 是通用性最佳的選擇,配合 OPENROWSET 即時查詢或 DTS 批量遷移,能涵蓋 95% 的遷移場景。遇到驅動問題時,Jet OLE DB 或中繼格式為有效備案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved