【问题标题】:How to read and write to a Paradox 7.x database from .NET app?如何从 .NET 应用程序读取和写入 Paradox 7.x 数据库?
【发布时间】:2018-09-12 18:17:45
【问题描述】:

我开发 .NET 应用程序 (C#),我需要读取和更新 Paradox 7.x 数据库中的一些数据。

根据Microsoft article 的 Paradox 7-8 不提供对 OLEDB 的支持。

根据another SO question 可以读取,但不能写入。

那么有什么方法(可能是一些第三方库或一些 BDE 包装器)我如何读写 Paradox 7.x 数据库?

更新我已经尝试过 OleDB 方法:

var builder = new OleDbConnectionStringBuilder();
builder.DataSource = "D:\\MyBase\\";
builder.Provider = "Microsoft.Jet.OLEDB.4.0";
var connection = new OleDbConnection(builder.ToString() + ";Extended Properties=Paradox 5.x");
var command = new OleDbCommand("SELECT * FROM Planes", connection);

connection.Open();
using (var reader = command.ExecuteReader())
     if (reader.HasRows)
         while (reader.Read())
               listBox1.Items.Add(reader.GetString(2));

这个失败并出现 OleDbException(可以预料,因为我的数据库有 Paradox 7.x 格式):

外部表不是预期的格式

如果我将连接字符串更改为Extended Properties=Paradox 7.x - 一个失败并出现另一个 OleDbException(可以预期,因为根据 Microsoft 文章,OLEDB 不支持 Paradox 7))

无效操作

我尝试过 ODBC 方法:

var connectionString = "Driver={Microsoft Paradox Driver (*.db )};" 
                + "DriverID=538;Fil=Paradox 7.X;"
                + "DefaultDir=D:\\MyBase\\;"
                + "Dbq=D:\\MyBase\\;"
                + "CollatingSequence=ASCII;";

var connection = new OdbcConnection(connectionString);
var command = new OdbcCommand("SELECT * FROM Planes", connection);

connection.Open();
using (var reader = command.ExecuteReader())
      if (reader.HasRows)
            while (reader.Read())
                  listBox1.Items.Add(reader.GetString(2));

那个也因 OdbcException 而失败

错误 [HY000] [Microsoft] [Paradox ODBC 驱动程序] 外部表不是预期格式

所以现在什么都行不通..

【问题讨论】:

标签: c# .net database paradox


【解决方案1】:

所以最后我通过 Microsoft.Jet.OLEDB.4.0 管理了读取和甚至写入 Paradox 7.x 数据库(类似于Microsoft tells 我们的 Paradox 7-8不支持):

  1. 安装AccessDatabaseEngine for Office 2007 (32bit)
  2. 安装AccessDatabaseEngine for Office 2010 (32bit)(选择AccessDatabaseEngine.exe
  3. 安装 BDE 5.1.1.1(最好安装在 D:\BDE 之类的地方)
  4. 通过 BDE 管理员 change NET DIR 从 C:\ 到您具有写入权限的任何文件夹(我已更改为 D:\BDE)

下面的代码就像一个魅力

var builder = new OleDbConnectionStringBuilder();
builder.Add("Provider", "Microsoft.Jet.OLEDB.4.0");
builder.Add("Data Source", @"D:\MyBase\");
builder.Add("Persist Security Info", "False");
builder.Add("Extended properties", "Paradox 7.x; HDR=YES");
var connection = new OleDbConnection(builder.Tostring()); 
var command = new OleDbCommand("SELECT * FROM Planes", connection);
//reading
connection.Open();
using (var reader = command.ExecuteReader())
     if (reader.HasRows)
         while (reader.Read())
               listBox1.Items.Add(reader.GetString(2));
//writing
command = new OleDbCommand("DELETE * FROM Planes", connection);
command.ExecuteNonQuery();
connection.Close();

希望这些信息能帮助像我这样的人。

【讨论】:

  • 这里真的需要 Microsoft Access 数据库引擎 2007 和 2010 吗?我有 BDE 5.1.1.1,我可以选择数据,但在尝试写入 Paradox 数据库时出现错误:“操作必须使用可更新查询”进行插入,“UPDATE 语句中的语法错误”进行更新,以及“无法删除”从指定的表”删除。
  • @meir 嗯,那是 2.5 年前 :) 你可以按照我的指南,据我记得我能够写数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多