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

C# 解決無法更新 Paradox 資料庫「索引不唯一」錯誤

     編輯:關於C#

錯誤現象

使用 Microsoft Paradox Driver (*.db) 透過 ODBC 連線 Paradox 資料庫,執行 UPDATE 或 DELETE 時拋出:

另一種非常常見的原因是聯接包含的鏈接 ODBC 表的索引不是唯一的。在這種情況下,SQL 無法保證表中的記錄是唯一,該表中字段的值將隨查詢發生更改。

根本原因

Paradox 驅動程式要求 被更新資料表必須擁有唯一索引(主鍵或 Unique Index),否則無法定位唯一記錄進行更新/刪除。單純建立普通索引不足夠,必須是 唯一 索引。

解決步驟

  1. 開啟 Paradox 官方工具 Database Desktop(Delphi/C++Builder 附屬,或獨立下載)。
  2. 開啟目標 .db 檔案。
  3. 選取資料表 → 「重組表」/「編輯表結構」 → 為主鍵欄位(或唯一識別欄位)建立 唯一索引。
  4. 完成後會產生對應的 .px 索引檔(如 CUSTOMER.PX)。
  5. 重新執行 C# 更新程式,錯誤即消失。

連接字串與基本 CRUD 範例

using System;
using System.Data.Odbc;

public class ParadoxHelper
{
    private readonly string _connStr;

    public ParadoxHelper(string folderPath)
    {
        _connStr = $@"Driver={{Microsoft Paradox Driver (*.db )}};DriverID=538;Fil=Paradox 5.X;DefaultDir={folderPath};Dbq={folderPath};CollatingSequence=ASCII;";
    }

    public void ExecuteNonQuery(string sql)
    {
        using (var conn = new OdbcConnection(_connStr))
        using (var cmd = conn.CreateCommand())
        {
            conn.Open();
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery();
        }
    }

    public object ExecuteScalar(string sql)
    {
        using (var conn = new OdbcConnection(_connStr))
        using (var cmd = conn.CreateCommand())
        {
            conn.Open();
            cmd.CommandText = sql;
            return cmd.ExecuteScalar();
        }
    }
}

// 使用範例
var db = new ParadoxHelper(@"C:\Data\ParadoxDB");
db.ExecuteNonQuery("UPDATE Customers SET ContactName='New Name' WHERE CustNo=1001");
Console.WriteLine(db.ExecuteScalar("SELECT COUNT(*) FROM Customers"));

常見坑點與對策

問題原因解決
找不到驅動程式64 位元程式需 64 位元 Paradox ODBC 驅動安裝 64 位元驅動或將專案設為 x86 (Prefer 32-bit)
中文亂碼Paradox 5.x 預設 ANSI,編碼頁不符連接字串加 CollatingSequence=ASCII 或對應代碼頁
同時開啟鎖定衝突Paradox 使用 .lck 檔鎖定,多程式並存易衝突錯峰存取、或遷移至 SQLite/SQL Server
欄位名稱含空格/保留字SQL 解析失敗用雙引號括住:UPDATE "Customer Table" SET "Contact Name"=...

遷移建議

Paradox 為 90 年代產物,已無主流支援。新專案強烈建議:

  • 資料遷移至 SQLite(無伺服器、單檔、支援完整 SQL、跨平台)。
  • 或 SQL Server Express / LocalDB(企業級功能、免費授權)。
  • 遷移工具:Database Desktop 匯出 CSV → 批次匯入新資料庫。

總結

C# 操作 Paradox 失敗「索引不唯一」的核心解法是:用 Database Desktop 為資料表建立唯一索引(產生 .px 檔)。本文提供完整連接字串、CRUD 封裝、常見坑點對策與遷移建議,助你快速解決舊系統維護問題,並規劃長遠技術棧升級。

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