如何从.NET应用程序读取和写入Paradox 7.x数据库?

时间:2018-04-03 12:10:04

标签: c# .net database paradox

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

对于Paradox 7-8的Microsoft article,没有为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格式):

  

外部表格不是预期的格式

如果我将connecton字符串更改为Extended Properties=Paradox 7.x - 那个人失败了,并且没有使用OleDbException(可以预料,因为根据微软的文章,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] [微软] [Paradox ODBC驱动程序]外部表格未达到预期格式

所以没有任何工作,现在......

1 个答案:

答案 0 :(得分: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)
  5. 以下代码就像魅力一样

    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();
    

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