You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在.NET(C#)应用中读写Paradox 7.x数据库?

可行的Paradox 7.x读写方案(.NET/C#)

兄弟,我刚好之前踩过Paradox 7.x在.NET里读写的坑,给你分享几个亲测可行的方案,完美解决OLEDB只能读不能写的问题:

方案一:用封装了BDE的.NET第三方数据提供者

Paradox本来就是Borland家的产物,原生的BDE引擎对它的读写支持是最完整的。现在有不少第三方厂商把BDE封装成了.NET友好的ADO.NET数据提供者,比如Devart的dotConnect for Paradox,或者ComponentOne的相关组件。

  • 这类库用起来和普通的ADO.NET完全一致,连接字符串会指定Paradox版本,比如:
    var connectionString = "Provider=Devart.Data.Paradox;Data Source=D:\\MyBase\\;Paradox Version=7.0;";
    using (var conn = new ParadoxConnection(connectionString))
    {
        conn.Open();
        // 执行更新操作
        var cmd = new ParadoxCommand("UPDATE MyTable SET Field1 = 'NewVal' WHERE ID = 1", conn);
        cmd.ExecuteNonQuery();
    }
    
  • 好处是不需要自己折腾BDE的配置,库会帮你处理底层交互,稳定性也高。

方案二:ODBC驱动+BDE组合拳

如果不想用商用库,可以试试ODBC桥接BDE的方式:

  1. 先安装BDE(可以找Borland Legacy的安装包,或者兼容的第三方BDE安装程序,注意要对应系统位数);
  2. 在Windows的ODBC数据源管理器里,添加一个Paradox数据源,选择Microsoft Paradox Driver (*.db),设置数据库目录为你的D:\MyBase\,并指定Paradox版本为7.x;
  3. 在C#里用OdbcConnection来操作,连接字符串示例:
    var connectionString = "Driver={Microsoft Paradox Driver (*.db)};DriverID=538;Fil=Paradox 7.X;DefaultDir=D:\\MyBase\\;Dbq=D:\\MyBase\\;";
    using (var conn = new OdbcConnection(connectionString))
    {
        conn.Open();
        var updateCmd = new OdbcCommand("UPDATE Customers SET Name = 'UpdatedName' WHERE ID = 5", conn);
        updateCmd.ExecuteNonQuery();
    }
    
  • 注意:要确保数据库目录有读写权限,Paradox会生成锁文件(*.lck),如果权限不够会写入失败。

方案三:纯.NET开源库SharpParadox

如果不想依赖任何外部驱动(比如BDE),可以试试开源的SharpParadox库,它是纯.NET实现的Paradox数据库读写组件,不需要安装额外软件,部署方便。

  • 用法示例:
    using SharpParadox;
    
    // 打开数据库目录
    using var db = new ParadoxDatabase(@"D:\MyBase\");
    // 打开目标表
    using var table = db.OpenTable("Orders");
    
    // 修改一条记录
    var record = table.GetRecord(3); // 按索引获取记录
    record["OrderDate"] = new DateTime(2024, 5, 20);
    table.UpdateRecord(record);
    
    // 插入新记录
    var newRecord = table.CreateNewRecord();
    newRecord["CustomerID"] = 10;
    newRecord["Amount"] = 99.99;
    table.InsertRecord(newRecord);
    
  • 这个库支持Paradox 3.x到7.x的版本,完全满足你的需求,而且是开源的,有问题还可以自己看源码调试。

另外补充下,你之前试的OLEDB方案确实不行,微软官方明确说Paradox 7-8不支持OLEDB的写入操作,所以换上面的任意一种方案都能解决问题。

内容的提问来源于stack exchange,提问作者bairog

火山引擎 最新活动