如何在.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的方式:
- 先安装BDE(可以找Borland Legacy的安装包,或者兼容的第三方BDE安装程序,注意要对应系统位数);
- 在Windows的ODBC数据源管理器里,添加一个Paradox数据源,选择
Microsoft Paradox Driver (*.db),设置数据库目录为你的D:\MyBase\,并指定Paradox版本为7.x; - 在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




